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

Docker部署pgAdmin遇权限及密码读取问题求助

问题解决步骤

一、修复初始权限错误(已部分解决,完善方案)

pgAdmin容器启动时的权限错误是因为容器内/var/lib/pgadmin目录的所有权不匹配,可通过以下两种方式解决:

方式1:自定义Dockerfile(推荐)

修改你的Dockerfile,确保pgadmin用户拥有目录权限并设置pgpass文件的安全权限:

FROM dpage/pgadmin4:6.20
ADD servers.json /pgadmin4/servers.json
ADD pgpass /var/lib/pgadmin/storage/pgadmin4_pgadmin.org/pgpass
USER root
# 设置目录所有权和pgpass文件的600权限(PostgreSQL要求密码文件不可被其他用户读取)
RUN chown -R pgadmin:pgadmin /var/lib/pgadmin && \
    chmod 600 /var/lib/pgadmin/storage/pgadmin4_pgadmin.org/pgpass
USER pgadmin

方式2:Docker Compose命令修正权限

无需自定义镜像,在docker-compose中添加启动命令修正权限:

pgadmin:
  container_name: pgadmin
  image: dpage/pgadmin4:6.20
  environment:
    - PGADMIN_DEFAULT_EMAIL=pgadmin4@pgadmin.org
    - PGADMIN_DEFAULT_PASSWORD=admin
    - PGADMIN_CONFIG_SERVER_MODE=True
  ports:
    - "5050:80"
  volumes:
    - ./backend/pgadmin/servers.json:/pgadmin4/servers.json
    - ./backend/pgadmin/pgpass:/var/lib/pgadmin/storage/pgadmin4_pgadmin.org/pgpass
  depends_on:
    - db
  command: >
    sh -c "chown -R pgadmin:pgadmin /var/lib/pgadmin && 
           chmod 600 /var/lib/pgadmin/storage/pgadmin4_pgadmin.org/pgpass && 
           /entrypoint.sh"

二、修复数据库连接密码错误

当前出现fe_sendauth: no password supplied错误,存在三个核心问题:

1. 数据库名称不匹配

  • Docker Compose中POSTGRES_DB设置为GOYN,但servers.json的MaintenanceDB和pgpass文件中使用的是MYDB,需统一名称:
    • 选项A:修改docker-compose的数据库名称:
      environment:
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=postgres
        - POSTGRES_DB=MYDB
      
    • 选项B:修改servers.json和pgpass:
      • servers.json:"MaintenanceDB": "GOYN"
      • pgpass文件:db:5432:GOYN:postgres:postgres

2. PassFile路径错误

servers.json中PassFile指向/pgpass,但实际文件挂载在/var/lib/pgadmin/storage/pgadmin4_pgadmin.org/pgpass,需修正路径:

"PassFile": "/var/lib/pgadmin/storage/pgadmin4_pgadmin.org/pgpass"

3. 确保数据库服务就绪

depends_on仅保证容器启动,不确保数据库服务就绪,添加健康检查等待数据库可用:

db:
  container_name: postgis
  image: postgis/postgis:15-3.3
  environment:
    - POSTGRES_USER=postgres
    - POSTGRES_PASSWORD=postgres
    - POSTGRES_DB=GOYN # 对应你选择的数据库名称
  ports:
    - "5432:5432"
  volumes:
    - pgdata:/var/lib/postgresql/data
  healthcheck:
    test: ["CMD-SHELL", "pg_isready -U postgres -d GOYN"] # 数据库名称需匹配
    interval: 5s
    timeout: 5s
    retries: 5

pgadmin:
  # ...其他配置
  depends_on:
    db:
      condition: service_healthy

最终验证步骤

  1. 清理旧容器和卷:docker-compose down -v
  2. 重新启动服务:docker-compose up --build(使用自定义镜像时加--build)
  3. 访问pgAdmin(http://localhost:5050),检查服务器连接是否正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:27:02