踩坑:Docker 卷挂载后「Permission denied」——UID/GID 与 root 容器
·
现象
容器内写 /data 成功,挂载到宿主机目录 不可写;或反之宿主机文件容器内 只读。
根因
Linux 权限按 UID/GID 数值匹配;容器内进程用户与宿主机目录所有者 不一致;root 映射与 user namespace 策略因环境而异。
常见踩坑
- Dockerfile 里 USER 非 root,但 volume 是 root 拥有的目录。
- WSL / macOS bind mount 权限语义与纯 Linux 不一致导致误以为「Docker 坏了」。
解决
- 构建镜像时用 固定 UID 跑进程,宿主机目录
chown到同 UID。 - Compose 使用
user: "1000:1000"等与宿主机对齐(按实际调整)。 - 开发环境可用命名卷或 entrypoint 调权限(生产慎用 chmod 777)。
总结
Volume 权限 = 数值 UID 对齐,不是「我给文件夹读写就够了」那么简单。
更多推荐


所有评论(0)