Docker-Compose部署pgAdmin 8.12连接PostgreSQL提示无密码错误
解决pgAdmin与PostgreSQL无密码连接的
fe_sendauth及权限问题 问题根源
pgAdmin容器日志里的chown: /tmp/pgpass: Operation not permitted是核心诱因:挂载的pgpass文件宿主机权限与容器内pgadmin用户(默认UID/GID为5050)不匹配,导致pgAdmin无法读取该文件,进而触发fe_sendauth: no password supplied错误。而psql能正常访问是因为它直接沿用了PostgreSQL的信任认证规则(pg_hba.conf配置),不依赖pgpass文件。
解决方案
方案1:调整pgpass文件的宿主机权限
- 确认pgAdmin容器内用户的UID/GID(默认是5050:5050)
- 在宿主机执行命令修改文件所有者:
sudo chown 5050:5050 /path/to/your/pgpass - 设置文件权限为600(pgpass要求必须是所有者只读,否则会被忽略):
sudo chmod 600 /path/to/your/pgpass - 重启服务:
docker-compose down && docker-compose up -d
方案2:在docker-compose.yml中映射宿主机用户UID/GID
如果不想修改宿主机文件权限,可让容器内用户与宿主机文件所有者匹配:
services: pgadmin: image: dpage/pgadmin4 environment: PGADMIN_DEFAULT_EMAIL: admin@example.com PGADMIN_DEFAULT_PASSWORD: admin PGADMIN_LISTEN_PORT: 5050 volumes: - ./servers.json:/pgadmin4/servers.json - ./pgpass:/tmp/pgpass user: "1000:1000" # 替换为宿主机当前用户的UID:GID,用`id -u`和`id -g`查看
设置pgpass权限为600后,重启服务即可。
方案3:修改PostgreSQL的pg_hba.conf实现信任连接(不推荐生产环境)
若无需依赖pgpass,可直接配置信任认证:
- 修改PostgreSQL的pg_hba.conf文件,添加:
或允许整个Docker子网:host all all <pgadmin容器IP>/32 trusthost all all 172.17.0.0/16 trust - 重启PostgreSQL容器,pgAdmin即可无密码连接数据库。
验证步骤
- 查看pgAdmin日志,确认
chown权限错误消失 - 在pgAdmin中重新连接TestDB,检查
fe_sendauth错误是否解决 - 确认pgpass文件格式正确:
hostname:port:database:username:password,无多余空格
内容的提问来源于stack exchange,提问作者Soumik Das
相关产品推荐
相关产品推荐

