docker - 如何在 docker 上绑定(bind)已安装的持久卷?我正在尝试在 docker 上运行 Sonarqube

标签 docker sonarqube

我想在 docker 上运行 SonarQube。当我运行whiteoutvolume persist选项时,它可以使用以下命令正常工作:

docker run -d --name sonarqube -p 9000:9000 sonarqube

但是当我尝试设置绑定(bind)安装的持久卷时,我的 docker 无法启动。使用的docker命令是:

 docker run -d --name sonarqube \
-p 9000:9000 \
-v /opt/docker-mounts/sonaarqube/conf:/opt/sonarqube/conf \
-v /opt/docker-mounts/sonaarqube/data:/opt/sonarqube/data \
-v /opt/docker-mounts/sonaarqube/logs:/opt/sonarqube/logs \
-v /opt/docker-mounts/sonaarqube/extensions:/opt/sonarqube/extensions \
sonarqube

注意:我以 root 权限运行 docker 命令。

我使用来自 Docker Hub 的 SonarQube 镜像:https://hub.docker.com/_/sonarqube?tab=description

我在 docker 日志中收到此错误:

> 06:42:37.293 [main] WARN org.sonar.application.config.AppSettingsLoaderImpl - Configuration file not found: /opt/sonarqube/conf/sonar.properties 2019.07.07 06:42:37 INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube/temp 2019.07.07 06:42:37 INFO app[][o.s.a.es.EsSettings] Elasticsearch listening on /127.0.0.1:9001 2019.07.07 06:42:37 INFO app[][o.s.a.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePrefix=es]] from [/opt/sonarqube/elasticsearch]: /opt/sonarqube/elasticsearch/bin/elasticsearch 2019.07.07 06:42:38 INFO app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release. 2019.07.07 06:42:38 INFO app[][o.e.p.PluginsService] no modules loaded 2019.07.07 06:42:38 INFO app[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]

2019-07-07 06:42:41,143 main ERROR Unable to create file /opt/sonarqube/logs/es.log java.io.IOException: Permission denied at java.base/java.io.UnixFileSystem.createFileExclusively(Native Method) at java.base/java.io.File.createNewFile(File.java:1024) at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:628) at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:608) at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:113) at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:114) at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:188) at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:145) at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:61) at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:123) at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:959) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:899) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:891) at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:514) at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:238) at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:250) at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:547) at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:263) at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:234) at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:127) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:302) at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) at org.elasticsearch.cli.Command.main(Command.java:90) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:116) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93)

2019-07-07 06:42:41,148 main ERROR Could not create plugin of type class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile: java.lang.IllegalStateException: ManagerFactory [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory@5dcd8c7a] unable to create manager for [/opt/sonarqube/logs/es.log] with data [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$FactoryData@2250b9f2[pattern=/opt/sonarqube/logs/es.%d{yyyy-MM-dd}.log, append=true, bufferedIO=true, bufferSize=8192, policy=CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=true)]), strategy=DefaultRolloverStrategy(min=-2147483648, max=2147483647, useMax=false), advertiseURI=null, layout=%d{yyyy.MM.dd HH:mm:ss} %-5level es[][%logger{1.}] %msg%n, filePermissions=null, fileOwner=null]] java.lang.IllegalStateException: ManagerFactory [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory@5dcd8c7a] unable to create manager for [/opt/sonarqube/logs/es.log] with data [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$FactoryData@2250b9f2[pattern=/opt/sonarqube/logs/es.%d{yyyy-MM-dd}.log, append=true, bufferedIO=true, bufferSize=8192, policy=CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=true)]), strategy=DefaultRolloverStrategy(min=-2147483648, max=2147483647, useMax=false), advertiseURI=null, layout=%d{yyyy.MM.dd HH:mm:ss} %-5level es[][%logger{1.}] %msg%n, filePermissions=null, fileOwner=null]] at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:115) at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:114) at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:188) at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:145) at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:61) at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:123) at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:959) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:899) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:891) at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:514) at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:238) at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:250) at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:547) at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:263) at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:234) at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:127) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:302) at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) at org.elasticsearch.cli.Command.main(Command.java:90) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:116) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93)

2019-07-07 06:42:41,152 主要错误无法在元素 RollingFile 的类 org.apache.logging.log4j.core.appender.RollingFileAppender 中调用工厂方法:java.lang.IllegalStateException:找不到工厂方法类 org.apache.logging.log4j.core.appender.RollingFileAppender java.lang.IllegalStateException:找不到类 org.apache.logging.log4j.core.appender.RollingFileAppender 的工厂方法 在 org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.findFactoryMethod(PluginBuilder.java:235) 在 org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:135) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:959) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:899) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:891) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:514) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:238) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:250) 在 org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:547) 在 org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:263) 在 org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:234) 在 org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:127) 在 org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:302) 在 org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) 在 org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) 在 org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) 在 org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) 在 org.elasticsearch.cli.Command.main(Command.java:90) 在 org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:116) 在 org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93)

2019-07-07 06:42:41,154 main ERROR Null object returned for RollingFile in Appenders. 2019-07-07 06:42:41,154 main ERROR Unable to locate appender "file_es" for logger config "root" 2019.07.07 06:42:41 WARN app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [es]: 1 2019.07.07 06:42:41 INFO app[][o.s.a.SchedulerImpl] Process[es] is stopped 2019.07.07 06:42:41 INFO app[][o.s.a.SchedulerImpl] SonarQube is stopped

最佳答案

我认为您已持久化卷,但没有文件和所需的权限。请按照以下步骤操作。

启动没有持久卷的容器

$ docker run -d --name sonarqube -p 9000:9000 sonarqube
$ docker ps -f name=sonarqube

记下容器 ID。

将文件夹从容器复制到主机目录

$ cd /opt/docker-mounts/sonaarqube
$ chown -R 999:999 .
$ docker cp -a CONTAINER_ID:/opt/sonarqube/conf .
$ docker cp -a CONTAINER_ID:/opt/sonarqube/logs . # this can be skipped is not required 
$ docker cp -a CONTAINER_ID:/opt/sonarqube/data . # optional, if you need the existing data from the container 
$ docker cp -a CONTAINER_ID:/opt/sonarqube/extensions .

现在启动带有持久卷的容器

$ docker run -d --name sonarqube \
       -p 9000:9000 \
       -v /opt/docker-mounts/sonaarqube/conf:/opt/sonarqube/conf \
       -v /opt/docker-mounts/sonaarqube/data:/opt/sonarqube/data \
       -v /opt/docker-mounts/sonaarqube/logs:/opt/sonarqube/logs \
       -v /opt/docker-mounts/sonaarqube/extensions:/opt/sonarqube/extensions \
       sonarqube

关于docker - 如何在 docker 上绑定(bind)已安装的持久卷?我正在尝试在 docker 上运行 Sonarqube,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56920050/

相关文章:

bash - Jenkins 内部 docker-compose 的环境变量

docker - traefik 配置 docker + 文件

python - 无法在 Docker 上运行 Flask (ModuleNotFoundError)

java - Sonar 误报, "change condition so that it does not always evaluate to true."

java - Sonar javadoc规则

linux - libgit2 alpine linux docker 错误

docker - 如何从 docker 缓存中删除特定项目?

SonarQube - 什么是“更新信号量批处理?”

java - Sonar Lite 模式辅助类路径和 Ivy 依赖项

jenkins - Sonar 服务器无法访问