PostgreSQL Docker容器启动失败:数据目录权限不符合要求
PostgreSQL容器Windows启动失败(权限问题)
错误日志
PostgreSQL Database directory appears to contain a database; Skipping initialization 2023-10-10T02:18:54.886882600Z 2023-10-10T02:18:54.899928500Z 2023-10-10 02:18:54.899 UTC [1] FATAL: data directory "/var/lib/postgresql/data" has invalid permissions 2023-10-10T02:18:54.899974300Z 2023-10-10 02:18:54.899 UTC [1] DETAIL: Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).
Docker Compose配置
postgres: container_name: "postgres-" image: postgres:16.0 restart: unless-stopped command: postgres -c max_connections=200 volumes: - ./runtime/data:/var/lib/postgresql/data - ./runtime/postgres/socket:/var/run/postgresql environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_DB=postgres ports: - "5432:5432" ... ... volumes: postgres-tl:
说明:该配置在WSL及非Linux环境运行正常,但Windows环境下无法启动。
解决方案
推荐方案:使用Docker命名卷替代本地目录挂载
修改postgres服务的volumes配置,将本地目录挂载替换为已定义的命名卷:volumes: - postgres-tl:/var/lib/postgresql/data - ./runtime/postgres/socket:/var/run/postgresqlDocker会自动管理命名卷的权限,适配容器内postgres用户的需求,彻底规避Windows文件系统的权限兼容性问题。
临时修复:调整本地目录权限(仅测试环境)
在Windows文件资源管理器中找到./runtime/data目录,右键选择「属性」→「安全」→「编辑」,添加「Everyone」用户并赋予「完全控制」权限。此方法适合快速测试,但生产环境不建议使用,存在安全风险。应急方案:临时以root启动修正权限(不推荐生产)
- 在postgres服务配置中添加
user: root:postgres: ... user: root ... - 启动容器后,进入容器修正目录权限:
docker exec -it postgres- chown -R postgres:postgres /var/lib/postgresql/data - 移除
user: root配置,重启容器即可正常运行。此方法会带来安全隐患,仅作为临时应急手段。
- 在postgres服务配置中添加
内容的提问来源于stack exchange,提问作者TASK
相关产品推荐
相关产品推荐

