Docker部署PostgreSQL与pgAdmin报Address not available错误排查
排查修复方案
核心问题定位
出现该报错由两个高频配置错误共同导致:
- PostgreSQL容器启动配置错误,
PGDATA路径使用了Windows本地路径格式,Linux环境的Postgres镜像无法识别,容器实际启动失败,5432端口未正常监听 - pgAdmin与PostgreSQL运行在独立的隔离容器中,pgAdmin容器内的
localhost指向自身容器内部,无法直接通过localhost访问宿主机或其他容器的服务
分步修复操作
1. 修复PostgreSQL容器配置,验证服务正常启动
首先清理之前启动异常的旧容器:
docker rm -f vy_posgres_for_acc
重新启动PostgreSQL容器,注意不要直接把Windows路径传给容器内的PGDATA环境变量,使用Docker卷挂载的方式映射数据目录,使用官方镜像默认的容器内数据路径即可:
docker run -d --name vy_posgres_for_acc -p 5432:5432 -e POSTGRES_PASSWORD=postgres -e POSTGRES_USER=postgres -v D:\docker_mount\postgres\data:/var/lib/postgresql/data postgres:14.4
启动后执行命令验证服务状态:
- 执行
docker ps,确认vy_posgres_for_acc容器状态为Up - 执行
docker logs vy_posgres_for_acc,日志末尾出现database system is ready to accept connections即为启动正常
2. 配置容器网络,实现两个容器互通
Docker默认桥接网络不支持直接通过容器名解析通信,需要自定义桥接网络:
- 创建自定义网络:
docker network create pg-network - 将正常运行的PostgreSQL容器接入该网络:
docker network connect pg-network vy_posgres_for_acc - 清理旧的pgAdmin容器,重新启动时接入同一网络:
docker rm -f $(docker ps -aq --filter "ancestor=dpage/pgadmin4:latest") docker run -d --name pgadmin -p 5050:80 -e PGADMIN_DEFAULT_EMAIL=donhuvy@hotmail.com -e PGADMIN_DEFAULT_PASSWORD=postgres --network pg-network dpage/pgadmin4:latest
3. 正确配置pgAdmin连接参数
访问http://localhost:5050登录pgAdmin后,新建数据库连接时按以下参数填写:
- 主机名/地址:
vy_posgres_for_acc(Docker自定义网络会自动解析容器名为对应容器IP,不需要填写IP或localhost) - 端口:
5432 - 用户名:
postgres - 密码:
postgres
备选方案:如果不想配置自定义网络,主机名可以填写
host.docker.internal,这是Windows Docker Desktop提供的特殊域名,会指向宿主机,通过宿主机的5432端口映射连接PostgreSQL,稳定性略低于同容器网络方案。
内容的提问来源于stack exchange,提问作者Đỗ Như Vỹ
相关产品推荐
相关产品推荐

