我正在尝试将Sonarqube与CloudRun一起使用,为此,我需要在启动docker映像时支持使用环境变量PORT。因此,我尝试像以下方式“扩展”我的Dockerfile
:
FROM sonarqube:7.9-community
WORKDIR $SONARQUBE_HOME
COPY sonar.properties $SONARQUBE_HOME
COPY run.sh ./bin/
EXPOSE 8080
ENTRYPOINT ["./bin/run.sh"]
我将sonar.properties修改为包含如下一行:
sonar.web.port=__PORT__
然后我用行:
修改run.sh
sed "s/__PORT__/$PORT/g" ./sonar.properties > conf/sonar.properties
并尝试启动服务器,如:
docker run -e PORT=8080 sonarqube-custom
日志显示没有错误...
2019.11.15 02:55:04 INFO web[][o.s.s.q.ProjectsInWarningDaemon] Counting number of projects in warning is enabled.
2019.11.15 02:55:04 INFO web[][o.s.s.p.p.PlatformLevelStartup] Running Community Edition
2019.11.15 02:55:04 INFO web[][o.s.s.p.Platform] WebServer is operational
2019.11.15 02:55:04 INFO app[][o.s.a.SchedulerImpl] Process[web] is up
2019.11.15 02:55:04 INFO app[][o.s.a.ProcessLauncherImpl] Launch process[[key='ce', ipcIndex=3, logFilenamePrefix=ce]] from [/opt/sonarqube]: /usr/local/openjdk-11/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp --add-opens=java.base/java.util=ALL-UNNAMED -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -Dhttp.nonProxyHosts=localhost|127.*|[::1] -cp ./lib/common/*:/opt/sonarqube/lib/jdbc/h2/h2-1.3.176.jar org.sonar.ce.app.CeServer /opt/sonarqube/temp/sq-process3988720795271274831properties
2019.11.15 02:55:04 INFO web[][o.s.s.q.ProjectsInWarningDaemon] Counting number of projects in warning will be disabled as there are no more projects in warning.
2019.11.15 02:55:05 INFO ce[][o.s.p.ProcessEntryPoint] Starting ce
2019.11.15 02:55:05 INFO ce[][o.s.ce.app.CeServer] Compute Engine starting up...
2019.11.15 02:55:06 INFO ce[][o.e.p.PluginsService] no modules loaded
2019.11.15 02:55:06 INFO ce[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.join.ParentJoinPlugin]
2019.11.15 02:55:06 INFO ce[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.percolator.PercolatorPlugin]
2019.11.15 02:55:06 INFO ce[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
2019.11.15 02:55:07 INFO ce[][o.s.s.e.EsClientProvider] Connected to local Elasticsearch: [127.0.0.1:9001]
2019.11.15 02:55:07 INFO ce[][o.sonar.db.Database] Create JDBC data source for jdbc:h2:tcp://127.0.0.1:9092/sonar
2019.11.15 02:55:07 WARN ce[][o.s.db.dialect.H2] H2 database should be used for evaluation purpose only.
2019.11.15 02:55:08 INFO ce[][o.s.s.p.ServerFileSystemImpl] SonarQube home: /opt/sonarqube
2019.11.15 02:55:08 INFO ce[][o.s.c.c.CePluginRepository] Load plugins
2019.11.15 02:55:10 INFO ce[][o.s.c.c.ComputeEngineContainerImpl] Running Community edition
2019.11.15 02:55:10 INFO ce[][o.s.ce.app.CeServer] Compute Engine is operational
2019.11.15 02:55:10 INFO app[][o.s.a.SchedulerImpl] Process[ce] is up
2019.11.15 02:55:10 INFO app[][o.s.a.SchedulerImpl] SonarQube is up
但是,当我尝试访问URL localhost:8080
时会失败
答案 0 :(得分:1)
如果您以docker run -e PORT = 8080 sonarqube-custom的身份启动容器,则您将无法与localhost:8080上的任何内容进行联系,因为您尚未发布任何端口(例如,使用-p选项docker run)。
重要的是要注意,您可能根本不需要修改声纳配置:您可以docker run -p 8080:9000 ...
在主机上的端口8080上公开服务,尽管该服务在容器内的端口9000上运行
答案 1 :(得分:0)
您需要了解expose
标志(-e
)和publish
标志(-p
)之间的区别。想象一下您的容器就像一台计算机,而您的Docker堆栈(服务的集合)就像一个网络。您已经安装了计算机防火墙和网络防火墙。
当您expose
端口时,计算机防火墙会打开端口以允许入口流量。因此,只要不暴露端口,就只能从容器(或我们参考中的计算机)内部访问监听端口的服务。对于仅希望从网络内部访问服务的情况,此配置很有用。例如,与业务逻辑层进行交互但不应暴露于开放Internet的数据库。暴露后,来自同一堆栈的其他容器(或同一网络中的其他计算机)的流量可以访问该服务,但是由于网络防火墙不允许任何入口流量,因此无法从其他网络访问该服务。>
这是端口publish
的输入端口。当您expose
和 publish
端口时,不仅可以访问网络上侦听的服务来自容器中堆栈中的其他服务(网络中的其他计算机),也来自网络外部。此配置非常适合与用户进行交互的服务。例如,您的应用程序的用户界面层。