Docker容器中PostgreSQL连接报错:Adminer可连但pgAdmin/.NET Core无法访问
问题根源
该问题由两个配置疏漏导致:
- PostgreSQL服务未做端口映射到宿主机:Adminer和PostgreSQL同属Docker Compose创建的内部网桥网络,可直接通过服务名
db互相访问,无需暴露端口到宿主机;但运行在宿主机网络的pgAdmin、.NET Core程序无法直接访问容器内部的5432端口。 - 环境变量容易被混淆使用:配置中
POSTGRES_USER(数据库用户名)的值为mtpass,POSTGRES_PASSWORD(数据库密码)的值为mtuser,连接时容易填反参数。
修复步骤
- 修改docker-compose.yml配置,给db服务添加端口映射,完整参考配置如下:
version: '1' services: db: image: postgres restart: always # 新增端口映射,前者为宿主机端口,后者为容器内postgres默认端口 ports: - 5432:5432 environment: POSTGRES_PASSWORD: mtuser POSTGRES_USER: mtpass adminer: image: adminer restart: always ports: - 8080:8080
备注:若宿主机5432端口已被占用,可将映射改为
5433:5432,后续连接时使用5433端口即可。
- 执行
docker-compose up -d重启容器使配置生效。 - 本地程序连接参数配置:
- 主机地址:
127.0.0.1或localhost - 端口:你配置的宿主机映射端口,默认填
5432 - 用户名:
mtpass - 密码:
mtuser
- 主机地址:
内容的提问来源于stack exchange,提问作者Mehmet Topçu
相关产品推荐
相关产品推荐

