现象

容器内写 /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 对齐,不是「我给文件夹读写就够了」那么简单。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐