Windows环境docker-compose配置pgadmin密码文件出现fe_sendauth: no password supplied错误
问题原因
- 密码文件
/pgadmin4/servers_pass属主为root,pgadmin服务默认运行用户为pgadmin,无读取权限 - 密码文件权限为755,不符合PostgreSQL密码文件要求的*所有者只读(600)*规则,权限不合规的密码文件会被客户端直接忽略,因此触发
fe_sendauth: no password supplied报错 - 此前测试的无注释简化版密码文件格式错误,pgpass标准格式为
hostname:port:database:username:password,多字段的错误配置无法被正确识别
解决步骤
- 修改docker-compose.yml中pgadmin服务的配置,添加启动命令自动修正密码文件的属主和权限(Windows宿主机无法直接设置Linux文件权限,在容器启动时修改是最适配跨平台挂载的方案),参考配置:
services: pgadmin: # 保留原有镜像、端口、环境变量等配置不变 volumes: - ../db/servers.json:/pgadmin4/servers.json - ../db/servers_pass:/pgadmin4/servers_pass command: > sh -c " chown pgadmin:pgadmin /pgadmin4/servers_pass && chmod 600 /pgadmin4/servers_pass && /entrypoint.sh "
- 确认
servers.json中的对应服务器配置已添加PassFile字段指定密码文件路径,参考配置段:
{ "Servers": { "1": { "Name": "PostgreSQL服务", "Group": "默认服务组", "Host": "database", "Port": 5432, "MaintenanceDB": "postgres", "Username": "postgres", "PassFile": "/pgadmin4/servers_pass", "SSLMode": "prefer" } } }
- 修正密码文件格式,保留第一版带注释的配置即可,
#开头的注释行会被自动忽略,通配符*可匹配所有数据库,符合格式要求:
#host:port:db:user:pass database:5432:*:postgres:mypasswd
配置修改完成后重建pgadmin容器即可生效。
内容的提问来源于stack exchange,提问作者ymoreau
相关产品推荐
相关产品推荐

