You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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文件的宿主机权限

  1. 确认pgAdmin容器内用户的UID/GID(默认是5050:5050)
  2. 在宿主机执行命令修改文件所有者:
    sudo chown 5050:5050 /path/to/your/pgpass
    
  3. 设置文件权限为600(pgpass要求必须是所有者只读,否则会被忽略):
    sudo chmod 600 /path/to/your/pgpass
    
  4. 重启服务:
    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,可直接配置信任认证:

  1. 修改PostgreSQL的pg_hba.conf文件,添加:
    host    all             all             <pgadmin容器IP>/32        trust
    
    或允许整个Docker子网:
    host    all             all             172.17.0.0/16          trust
    
  2. 重启PostgreSQL容器,pgAdmin即可无密码连接数据库。

验证步骤

  1. 查看pgAdmin日志,确认chown权限错误消失
  2. 在pgAdmin中重新连接TestDB,检查fe_sendauth错误是否解决
  3. 确认pgpass文件格式正确:hostname:port:database:username:password,无多余空格

内容的提问来源于stack exchange,提问作者Soumik Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 22:39:55