首页 > 解决方案 > Docker-compose 服务(sonarqube)无法访问其他服务(postgres)

问题描述

我有以下 sonarqube+postgres docker-compose 文件。它在我的本地机器上Docker for WindowsDocker 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

标签: postgresqldockerdocker-composesonarqube

解决方案


推荐阅读