首页 > 解决方案 > Docker 启动 sonarqube:7.5-community 失败并获得 es 日志权限

问题描述

我们正在将所有东西都移到 docker 上,包括 Sonar。

版本

Docker version 1.13.1, build b2f74b2/1.13.1
SonarQube Image: sonarqube:7.5-community

命令

sudo docker run -d --name sonar --restart always --privileged=true -p 9000:9000 -p 9092:9092 
-v /home/test/sonardata/conf:/opt/sonarqube/conf  
-v /home/test/sonardata/data:/opt/sonarqube/data 
-v /home/test/sonardata/logs:/opt/sonarqube/logs 
-v /home/test/sonardata/extensions:/opt/sonarqube/extensions -e "SONARQUBE_JDBC_USERNAME=sonar"  -e "SONARQUBE_JDBC_PASSWORD=sonar" -e "SONARQUBE_JDBC_URL=jdbc:mysql://172.17.0.2:3306/db_sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" sonarqube:7.5-community

日志

02:05:41.953 [main] WARN org.sonar.application.config.AppSettingsLoaderImpl - Configuration file not found: /opt/sonarqube/conf/sonar.properties
2019.05.07 02:05:42 INFO  app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube/temp
2019.05.07 02:05:42 INFO  app[][o.s.a.es.EsSettings] Elasticsearch listening on /127.0.0.1:9001
2019.05.07 02:05:42 INFO  app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePrefix=es]] from [/opt/sonarqube/elasticsearch]: /opt/sonarqube/elasticsearch/bin/elasticsearch -Epath.conf=/opt/sonarqube/temp/conf/es
2019.05.07 02:05:43 INFO  app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running
2019.05.07 02:05:44 INFO  app[][o.e.p.PluginsService] no modules loaded
2019.05.07 02:05:44 INFO  app[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
2019-05-07 02:05:48,623 main ERROR Unable to create file /opt/sonarqube/logs/es.log java.io.IOException: Permission denied
        at java.io.UnixFileSystem.createFileExclusively(Native Method)
        at java.io.File.createNewFile(File.java:1012)
        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:115)
        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:144)
        at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:60)
        at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:958)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:898)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:890)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:513)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:237)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:249)
        at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
        at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:261)
        at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:166)
        at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:122)
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:307)
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132)
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123)
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:70)
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134)
        at org.elasticsearch.cli.Command.main(Command.java:90)
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91)
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84)
...

  搜索了很多,似乎最建议更改文件夹权限。我的映射文件夹使用“测试”用户,它是 sudoer 用户而不是 root 用户。此外,docker 命令需要 'sudo' 权限。

这是运行问题的链接:https ://michalwegrzyn.wordpress.com/2016/07/14/do-not-run-sonar-as-root/

如果有人可以提供帮助,非常感谢。

标签: dockerelasticsearchsonarqube

解决方案


这是因为 docker 用户没有写入/opt/sonarqube/*目录的权限;您可以确保以适当的访问权限运行容器,或更改/opt/sonarqube/*访问权限 - 例如

sudo chmod 777 /opt/sonarqube/*

推荐阅读