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

Docker容器中pgAdmin无法连接PostgreSQL问题求助

pgAdmin无法连接同一Docker网络中的PostgreSQL容器问题

我使用以下Docker Compose文件部署了PostgreSQL和pgAdmin容器:

version: "3.8"
services:

  postgres:
    container_name: postgres_container
    image: postgres:latest
    hostname: host.docker.internal
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    volumes:
      - pg-data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - postgres

  pgadmin:
    container_name: pgadmin_container
    image: dpage/pgadmin4:latest
    environment:
      PGADMIN_DEFAULT_EMAIL: "postgres@localhost.com"
      PGADMIN_DEFAULT_PASSWORD: "postgres"
      PGADMIN_CONFIG_SERVER_MODE: "False"
    volumes:
      - pgadmin-data:/var/lib/pgadmin
    ports:
      - "5050:80"
    networks:
      - postgres

volumes:
  pg-data:
  pgadmin-data:

networks:
  postgres:
    driver: bridge

当前症状:

  • pgAdmin可通过浏览器正常访问
  • PostgreSQL容器运行正常,可通过Docker Desktop进入命令行操作
  • 通过pgAdmin连接PostgreSQL时,提示“Unable to connect. Connection failed”
  • 已尝试更换端口、确认容器在同一网络、设置hostname等操作,均无效;查看日志未发现异常;查阅相关问题仍未解决。

解决方案

1. 修正PostgreSQL容器的hostname配置

你为postgres容器设置的hostname: host.docker.internal是Docker预留的、指向宿主机的特殊名称,容器内部使用这个名称会访问宿主机而非PostgreSQL容器本身,这是连接失败的核心原因。

修改postgres服务配置,移除该hostname设置,或改为自定义名称(比如postgres):

postgres:
  container_name: postgres_container
  image: postgres:latest
  # 移除hostname: host.docker.internal 或改为 hostname: postgres
  environment:
    - POSTGRES_DB=postgres
    - POSTGRES_USER=postgres
    - POSTGRES_PASSWORD=postgres
  volumes:
    - pg-data:/var/lib/postgresql/data
  ports:
    - "5432:5432"
  networks:
    - postgres

修改后重启容器:

docker-compose down && docker-compose up -d

2. 在pgAdmin中配置正确的连接参数

由于两个容器处于同一postgres网络,Docker内置DNS会解析服务名称,因此在pgAdmin创建服务器时:

  • 主机名/地址:填写postgres(即Docker Compose中PostgreSQL服务的名称,若修改了hostname则填对应名称)
  • 端口:5432
  • 维护数据库:postgres
  • 用户名:postgres
  • 密码:postgres

3. 容器间网络连通性排查(可选)

若仍无法连接,可进入pgAdmin容器验证网络连通性:

# 进入pgAdmin容器
docker exec -it pgadmin_container bash

# 安装ping工具(容器默认可能没有)
apt update && apt install -y iputils-ping

# 测试能否解析postgres服务
ping postgres

# 用psql直接测试连接
psql -h postgres -U postgres -d postgres

如果ping通且psql能成功连接,说明网络无问题,需检查pgAdmin的连接配置是否有误。

4. 验证PostgreSQL监听配置

默认PostgreSQL容器会监听所有地址,若有特殊配置可检查:

docker exec -it postgres_container bash
cat /var/lib/postgresql/data/postgresql.conf | grep listen_addresses

正常输出应为listen_addresses = '*',若不是,需修改配置并重启容器。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:30:29