You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker-Compose部署PostgreSQL与PgAdmin无法连接求助

问题描述

我使用以下docker-compose文件部署PostgreSQL与PgAdmin:

services:
  pgdatabase:
    image: postgres:13
    environment:
      - POSTGRES_USER=root
      - POSTGRES_PASSWORD=root
      - POSTGRES_DB=ny_taxi
    volumes:
      - "./data:/var/lib/postgresql/data:rw"
    ports:
      - "5432:5432"
  pgadmin:
    image: dpage/pgadmin4
    environment:
      - PGADMIN_DEFAULT_EMAIL=admin@admin.com
      - PGADMIN_DEFAULT_PASSWORD=root
    volumes:
      - "./data_pgadmin:/var/lib/pgadmin"
    ports:
      - "8080:80"

尝试通过PgAdmin连接PostgreSQL时,出现错误:

Unable to connect to server: could not translate host name "pgdatabase" to address: Name does not resolve

执行docker network ls得到结果:

NAME                       DRIVER    SCOPE
bridge                     bridge    local
docker-sql-pg_default      bridge    local
host                       host      local
none                       null      local

执行docker network inspect docker-sql-pg_default得到结果:

[
    {
        "Name": "docker-sql-pg_default",
        "Id": "bfee2f08620b5ffc1f8e10d8bed65c4d03a98a470deb8b987c4e52a9de27c3db",
        "Created": "2023-01-24T17:57:27.831702189Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.24.0.0/16",
                    "Gateway": "172.24.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "8f53be84a95c9c0591df6cc6edb72d4ca070243c3c067ab2fb14c2094b23bcee": {
                "Name": "docker-sql-pg-pgdatabase-1",
                "EndpointID": "7f3ddb29b000bc4cfda9c54a4f13e0aa30f1e3f8e5cc1a8ba91cee840c16cd60",
                "MacAddress": "02:42:ac:18:00:02",
                "IPv4Address": "172.24.0.2/16",
                "IPv6Address": ""
            },
            "bf2eb29b73fe9e49f4bef668a1f70ac2c7e9196b13350f42c28337a47fcd71f4": {
                "Name": "docker-sql-pg-pgadmin-1",
                "EndpointID": "b3a9504d75e11aa0f08f6a2b5c9c2f660438e23f0d1dd5d7cf4023a5316961d2",
                "MacAddress": "02:42:ac:18:00:03",
                "IPv4Address": "172.24.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "docker-sql-pg",
            "com.docker.compose.version": "2.13.0"
        }
    }
]

尝试连接网关IP 172.24.0.1和PostgreSQL实例IP 172.24.0.2均出现超时错误,请问我的网络为何无法正常运行?

解决方案

从提供的信息来看,两个容器确实处于同一默认网络,但出现域名解析失败和连接超时问题,可按以下步骤排查解决:

  • 验证PostgreSQL容器运行状态
    执行docker logs docker-sql-pg-pgdatabase-1,查看日志中是否存在database system is ready to accept connections的提示。如果PostgreSQL未完成启动或初始化失败,会直接导致连接失败。

  • 在容器内部测试连通性
    进入pgadmin容器,直接测试与PostgreSQL的连通性:

    docker exec -it docker-sql-pg-pgadmin-1 bash
    # 测试域名解析
    ping pgdatabase
    # 尝试用psql连接
    psql -h pgdatabase -U root -d ny_taxi
    

    如果ping不通,说明容器间DNS解析存在异常;如果ping通但psql连接失败,需检查PostgreSQL的配置。

  • 检查PostgreSQL监听配置
    进入PostgreSQL容器,查看postgresql.conf中的listen_addresses参数:

    docker exec -it docker-sql-pg-pgdatabase-1 bash
    grep listen_addresses /var/lib/postgresql/data/postgresql.conf
    

    如果参数值为localhost,则PostgreSQL仅监听本地回环地址,同网络的pgadmin无法连接,需修改为*后重启容器。

  • 排查防火墙/安全组限制
    主机防火墙可能拦截了容器间的流量,可临时关闭主机防火墙测试,或检查Docker的iptables转发规则是否正常。

  • 重启Docker服务
    若Docker网络组件出现异常,重启服务可修复DNS解析或网络连通问题:

    sudo systemctl restart docker
    

    重启后重新启动容器:docker-compose up -d

  • 显式定义自定义网络(可选)
    在docker-compose中显式创建自定义网络,避免默认网络的潜在问题:

    services:
      pgdatabase:
        # 保留原有配置
        networks:
          - pg-net
      pgadmin:
        # 保留原有配置
        networks:
          - pg-net
    networks:
      pg-net:
        driver: bridge
    

    重新部署后,容器间的DNS解析稳定性会提升。

内容的提问来源于stack exchange,提问作者OdiumPura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:38:49