postgresql - Docker-compose 服务(sonarqube)无法访问其他服务(postgres)
问题描述
我有以下 sonarqube+postgres docker-compose 文件。它在我的本地机器上Docker for Windows
和Docker for Mac
.
但是当我在我们的实时服务器(Ubuntu 18.04)上部署它时,sonarqube 无法访问 postgres,并且我在 sonarqube 容器日志中收到以下错误:
知道为什么会在实时服务器上发生这种情况吗?
这些是 Docker 和 Docker-Compose 版本:
本地机器
Docker 版本 18.09.2,内部版本 6247962
Docker-compose 版本 1.23.2,构建 1110ad01
服务器
Docker 版本 18.09.6,构建 481bc77
Docker-compose 版本 1.24.0,构建 0aa5906
version: "3.5"
services:
sonarqube:
image: sonarqube:7.7-community
ports:
- "9000:9000"
depends_on:
- db
networks:
- sonarnet
environment:
- SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
- SONARQUBE_JDBC_USERNAME=sonar
- SONARQUBE_JDBC_PASSWORD=sonar
- sonar.forceAuthentication=true
volumes:
- sonarqubeConf:/opt/sonarqube/conf
- sonarqubeData:/opt/sonarqube/data
- sonarqubeBundledPlugins:/opt/sonarqube/lib/bundled-plugins
- sonarqubeLogs:/opt/sonarqube/logs
db:
image: postgres
networks:
- sonarnet
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresqlData:/var/lib/postgresql/data
networks:
sonarnet:
driver: bridge
volumes:
sonarqubeConf:
name: sonarqubeConf
driver: local
sonarqubeData:
name: sonarqubeData
driver: local
sonarqubeBundledPlugins:
name: sonarqubeBundled
driver: local
sonarqubeLogs:
name: sonarqubeLogs
driver: local
postgresql:
name: postgresql
driver: local
postgresqlData:
name: postgresqlData
driver: local
我在 sonarqube 容器日志中收到以下错误:
SonarQube Server / 7.7.0.23042 / 1dcac8b8de36b377a1810cc8f1c4c31744e12729
sonarqube_1 | 2019.06.13 09:16:13 INFO web[][o.sonar.db.Database] Create JDBC data source for jdbc:postgresql://db:5432/sonar
sonarqube_1 | 2019.06.13 09:16:23 ERROR web[][o.s.s.p.Platform] Web server startup failed
sonarqube_1 | java.lang.IllegalStateException: Can not connect to database. Please check connectivity and settings (see the properties prefixed by 'sonar.jdbc.').
postgres 容器日志
db_1 | 2019-06-13 11:18:36.548 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
db_1 | 2019-06-13 11:18:36.548 UTC [1] LOG: listening on IPv6 address "::", port 5432
db_1 | 2019-06-13 11:18:36.561 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1 | 2019-06-13 11:18:36.579 UTC [24] LOG: database system was shut down at 2019-06-13 11:18:35 UTC
db_1 | 2019-06-13 11:18:36.585 UTC [1] LOG: database system is ready to accept connections
更多更新
我在撰写文件中添加了另一个服务(jenkins),它已启动并运行但我无法从 jenkins 服务访问 db 服务!例如ping db
不起作用!
当我获得他们桥接网络的网络状态时,我可以看到 postgres 和 jenkins 都已添加,但我什至无法ping db
从 jenkins 服务内部通过其 IP 地址(ping 172.22.0.3)进行服务!我怀疑这与 docker compose 服务之间的网络有关。知道为什么会这样吗?
[
{
"Name": "pipeline_sonarnet",
"Id": "754f1d4c5240fc34f0b34faffad61513b95c7c44f89fe15bd66efb7b79c4f53f",
"Created": "2019-06-13T22:33:58.907722824+01:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.22.0.0/16",
"Gateway": "172.22.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"10e84761051c6e6044be3d976ee51dfd70c41c89dc38aab2d3ebcbeb9c2d6129": {
"Name": "pipeline_db_1",
"EndpointID": "d8e3b21ffa536c7c437479b5dbaf9a5946177ef87f73cf8e024610ebc8d3c1db",
"MacAddress": "02:42:ac:16:00:03",
"IPv4Address": "172.22.0.3/16",
"IPv6Address": ""
},
"c1d042c77b3a0a6f519e11a5a812e38b95ac229244a5d6f28669c4132a104f30": {
"Name": "pipeline_jenkins_1",
"EndpointID": "e7592e5de8001ebf4df854c83670552bda78dad51191e215885fd7d58339d98b",
"MacAddress": "02:42:ac:16:00:02",
"IPv4Address": "172.22.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "sonarnet",
"com.docker.compose.project": "pipeline",
"com.docker.compose.version": "1.24.0"
}
}
]
有趣的!其他人也有同样的问题但没有答案: https ://forums.docker.com/t/docker-compose-works-on-my-machine-but-not-production/31410
解决方案
推荐阅读
- jwt - Microsoft Graph API - AuthenticationError:使用资源进行身份验证时出错
- sql - 如何在 Oracle 的 SQL 中打印模式输出
- spring-security - Thymeleaf 无法显示用户的用户名和角色
- amazon-web-services - 查找最新的 Ubuntu 20.04 AMI-ID 以使用 AWS-CLI 启动一个简单的微实例
- python - Pyvista:找出选择了哪个网格
- python - Python:试图了解 `lambda`s 如何与外部作用域交互
- javascript - 如何在 JavaScript 中过滤 DOMRange
- git - 在 Azure Devops 中创建分支时对作者的说明
- wix - 小升级 - 删除它时,如何卸载“原始”msi
- c# - OnnxRuntime 在 .NET 中使用和 sklearn SVMRegressor