非root用户在Docker容器中保存数据遇权限问题求解决
解决Docker挂载目录写入权限拒绝问题
排查步骤与解决方案
1. 检查宿主机挂载目录权限
先在宿主机查看~/documents的权限及所属用户组:
ls -ld ~/documents
如果目录权限为drwxr-xr-x(其他用户仅读/执行,无写入权限),可临时开放写入权限测试:
chmod o+w ~/documents
若测试有效,建议用更安全的方式调整,比如给容器内用户的组添加目录写入权限:
# 先进入容器,查看fenics用户的GID id -g fenics # 在宿主机给目录添加对应GID的读写权限 setfacl -m g:<容器内fenics的GID>:rwx ~/documents
2. 调整容器内挂载点权限
进入容器后,查看/home/fenics/shared的权限:
ls -ld /home/fenics/shared
若该目录属于root用户,可在启动容器时先修改权限再进入bash:
docker run -it -v ~/documents:/home/fenics/shared fenicsdrl1 /bin/bash -c "chown fenics:fenics /home/fenics/shared && /bin/bash"
如果有权限修改镜像的Dockerfile,可预先添加:
RUN chown fenics:fenics /home/fenics/shared
3. 处理SELinux限制(集群开启时)
学校集群可能开启SELinux,挂载目录时需添加z选项调整安全上下文:
docker run -it -v ~/documents:/home/fenics/shared:z fenicsdrl1 /bin/bash
z选项会让Docker自动适配挂载目录的SELinux标签,允许容器内用户写入。
4. 修正用户映射命令
之前的命令存在语法错误,多余的等号会导致参数失效,重新执行正确的用户映射命令:
docker run -it --user $UID:$(id -g $USER) -v ~/documents:/home/fenics/shared fenicsdrl1 /bin/bash
进入容器后执行id,确认当前用户UID/GID与宿主机一致,再尝试写入操作。
内容的提问来源于stack exchange,提问作者Leestring
相关产品推荐
相关产品推荐

