PostgreSQL Docker Compose本地挂载卷启动权限错误修复方法
修复PostgreSQL Docker容器启动的目录权限错误
问题原因
报错核心信息:FATAL: data directory "/var/lib/postgresql/data" has wrong ownership,这是因为你挂载的本地./data目录的所有者与容器内PostgreSQL进程运行的postgres用户(默认UID=999)不匹配,导致数据库进程无法读写数据目录。
解决方案
方案1:修改本地目录权限匹配容器用户
直接调整本地./data目录的所有者为容器内postgres用户的UID:
sudo chown -R 999:999 ./data
执行完成后重新启动容器:
docker compose up -d
方案2:使用Docker命名卷替代本地目录挂载
Docker命名卷会自动管理目录权限,无需手动调整。修改你的docker-compose.yml:
version: '3' services: db: image: postgres:14.6 restart: always environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres volumes: - postgres_data:/var/lib/postgresql/data # 添加命名卷定义 volumes: postgres_data:
修改后重新启动容器即可,数据会存储在Docker管理的卷中,避免权限问题。
方案3:自定义容器内postgres用户的UID/GID(开发环境适用)
如果你需要保持本地目录的所有者为当前用户,可以通过环境变量指定容器内postgres用户的UID/GID为你本地用户的UID/GID(执行id -u和id -g查看):
version: '3' services: db: image: postgres:14.6 restart: always environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_UID: 1000 # 替换为你的本地用户UID POSTGRES_GID: 1000 # 替换为你的本地用户GID volumes: - ./data:/var/lib/postgresql/data
注意:该特性需要PostgreSQL 12+版本的官方镜像支持,你的14.6版本可以正常使用。
内容的提问来源于stack exchange,提问作者Juan Carlos Gonzalez Quesada
相关产品推荐
相关产品推荐

