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

Docker Compose部署pgAdmin连接PostgreSQL密码验证失败求助

问题:Docker Compose部署pgAdmin与PostgreSQL连接失败

通过Docker Compose部署pgAdmin和PostgreSQL后,登录pgAdmin点击服务器时弹出密码输入提示,输入密码password123后反复出现提示,报错信息:

FATAL: password authentication failed for user "user"

我的配置文件

Docker Compose配置

version: '2'

networks:
  appnetwork:
    driver: bridge

services:
  
  postgresql:
    image: 'bitnami/postgresql:latest'
    ports:
      - '5432'
    networks:
      - appnetwork
    environment:
      - POSTGRESQL_USERNAME=user
      - POSTGRESQL_PASSWORD=password123
      - POSTGRESQL_DATABASE=my_database
    volumes:
      - ./postgresdata:/bitnami/postgresql

  pgAdmin:
    image: 'dpage/pgadmin4'
    ports:
      - '8001:80'
    networks:
      - appnetwork
    environment:
      - PGADMIN_DEFAULT_EMAIL=admin@admin.com
      - PGADMIN_DEFAULT_PASSWORD=password123
    volumes:
      - ./configs/pgadmin_servers.json:/pgadmin4/servers.json
      - ./configs/pgpass:/var/lib/pgadmin/pgpass/pgpass

pgadmin_servers.json配置

{
    "Servers": {
      "1": {
        "Name": "docker_postgres",
        "Group": "Servers",
        "Host": "host.docker.internal",
        "Port": 5432,
        "MaintenanceDB": "postgres",
        "Username": "user",
        "PassFile": "/var/lib/pgadmin/pgpass/pgpass",
        "SSLMode": "prefer"
      }
    }
  }

pgpass文件内容

host.docker.internal:5432:my_database:user:password123

已排查的点

  • 进入pgAdmin容器查看/var/lib/pgadmin/pgpass/pgpass文件,内容与本地配置一致。

可能的解决方法

1. 修正pgAdmin连接的Host地址

同一Docker Compose网络内,服务间需通过服务名访问,而非host.docker.internal。修改pgadmin_servers.json中的Host为PostgreSQL服务名:

"Host": "postgresql"

同步更新pgpass文件的主机部分:

postgresql:5432:my_database:user:password123

2. 修复pgpass文件权限

pgAdmin要求pgpass文件权限必须为600(仅所有者可读可写),否则会忽略该文件。进入pgAdmin容器执行:

chmod 600 /var/lib/pgadmin/pgpass/pgpass

或在docker-compose.yml中添加启动命令自动设置权限:

pgAdmin:
  # 其他配置不变
  command: >
    sh -c "chmod 600 /var/lib/pgadmin/pgpass/pgpass && /entrypoint.sh"

3. 验证PostgreSQL用户与数据库是否正确创建

进入PostgreSQL容器,执行命令检查用户和数据库:

docker exec -it <postgres容器ID> psql -U postgres

在PostgreSQL命令行中执行:

-- 检查用户是否存在
SELECT usename FROM pg_user WHERE usename='user';
-- 检查数据库是否存在
SELECT datname FROM pg_database WHERE datname='my_database';

若用户/数据库不存在,删除本地postgresdata目录后重新启动容器:

rm -rf ./postgresdata
docker-compose down
docker-compose up -d

4. 调整MaintenanceDB配置

pgAdmin的MaintenanceDB当前设为postgres,可尝试改为初始化的my_database:

"MaintenanceDB": "my_database"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:35:28