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文件共享
- 打开Docker Desktop设置,进入Resources > WSL Integration,确保对应的Ubuntu发行版已启用。
- 用
sudo编辑WSL的/etc/wsl.conf文件,添加以下内容:
[automount] options = "metadata,umask=0022"
- 执行
wsl --shutdown关闭WSL,再重启Docker Desktop和WSL。 - 重新创建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
相关产品推荐
相关产品推荐

