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

Windows Docker Desktop下PostgreSQL权限问题求助

解决方案

方法1:改用WSL内部目录存储数据

NTFS卷不支持Linux的文件权限系统,这是核心问题。把data目录移到WSL内部路径(比如~/project/data/postgres),不要用Windows的NTFS挂载路径(比如/mnt/c/xxx)。

修改docker-compose的volumes配置:

volumes:
  - ~/project/data/postgres:/var/lib/postgresql/data

WSL内部目录用ext4文件系统,支持Linux权限,容器能正常修改目录权限。

方法2:调整WSL挂载权限并启用Docker文件共享

  1. 打开Docker Desktop设置,进入Resources > WSL Integration,确保对应的Ubuntu发行版已启用。
  2. 用sudo编辑WSL的/etc/wsl.conf文件,添加以下内容:
[automount]
options = "metadata,umask=0022"
  1. 执行wsl --shutdown关闭WSL,再重启Docker Desktop和WSL。
  2. 重新创建data目录,启动容器。

这个配置让NTFS挂载的目录支持Linux权限映射,容器内用户可正常修改权限。

方法3:使用Docker命名卷替代本地绑定挂载

放弃本地目录绑定,改用Docker命名卷,权限由Docker自动处理:

postgres:
  image: postgis/postgis:15-master
  restart: unless-stopped
  volumes:
    - postgres_data:/var/lib/postgresql/data
  environment:
    POSTGRES_USER: directus
    POSTGRES_PASSWORD: somepasswd
    POSTGRES_DB: directus
  healthcheck:
    test: pg_isready -U directus
    interval: 10s
    start_period: 30s

# 在docker-compose最外层添加命名卷定义
volumes:
  postgres_data:

命名卷存储在WSL内部的Docker数据目录,不受NTFS权限限制。

额外修复:修正healthcheck的用户错误

你的healthcheck配置里用了-U miniflux,但环境变量中数据库用户是directus,两者不匹配,会导致健康检查失败,需改成:

healthcheck:
  test: pg_isready -U directus
  interval: 10s
  start_period: 30s

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:53:21