如何连接host.docker.internal的Postgres实例并解决pgAdmin认证错误
问题修复方案
配置不匹配问题整理
你的多份配置之间存在三处核心不匹配,是认证失败的直接原因:
- 端口不匹配:postgres容器对外映射端口为
5432,但servers.json、pgpass文件中均填写了15432,无法对应到postgres服务 - 账号密码不匹配:postgres容器配置的默认用户名为
root、默认密码为root,但servers.json中填写的用户名为postgres,pgpass文件中填写的账号密码为postgres/postgres,和容器配置完全不一致 - 挂载路径不匹配:docker-compose中pgadmin挂载的本地密码文件路径为
./pgpass,如果你本地的密码文件命名为.pgpass,会导致挂载的文件不存在,pgadmin无法读取密码
修复步骤
1. 调整servers.json配置
修正端口和用户名参数,修改后内容如下:
{ "Servers": { "1": { "Name": "docker_postgres", "Group": "docker_postgres_group", "Host": "host.docker.internal", "Port": 5432, "MaintenanceDB": "postgres", "Username": "root", "PassFile": "/pgpass", "SSLMode": "prefer" } } }
2. 调整pgpass配置
首先将本地.pgpass文件重命名为pgpass,再修改内容为:
host.docker.internal:5432:postgres:root:root
3. 修正pgpass文件权限
pgadmin会自动忽略权限不符合要求的密码文件,执行以下命令调整权限:
- 进入pgadmin容器:
docker exec -it pgadmin4_container bash - 修改文件权限与属主:
chmod 600 /pgpass && chown pgadmin:pgadmin /pgpass - 退出容器后重启服务:
docker restart pgadmin4_container
所有配置调整完成后重新打开pgAdmin即可正常连接postgres服务。
内容的提问来源于stack exchange,提问作者kickinchicken
相关产品推荐
相关产品推荐

