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
相关产品推荐
相关产品推荐

