解决数据卷root权限问题的Docker科研向实践思路

Docker好处多多。对用户,最大程度解决环境配置时权限困扰;对运维,方便控制资源分配调度。Docker的科研常用方法为每个用户自行创建容器,代码数据分离,数据以数据卷(Volume)的形式从宿主机(Host)挂载到工作的容器(Container)中。然而,实践中常发现宿主机视角下数据卷中文件权限被设置为root导致无法导出共享。这里分享一个实践思路来规避这个问题。

问题成因

问题在于容器使用者常以root身份进行以下操作

  1. 从镜像出发启动(run)一个容器
  2. 在容器内向数据卷写入文件

如此这般,容器内视角看数据卷以及写入文件的权限便被抬至root。然而,容器和宿主机共享同一个Linux内核,Linux管理文件权限使用的是uid和gid,因此,宿主机视角下数据卷及其文件的读写权限也被设置为容器内root的uid和gid。更进一步,宿主机视角下root的uid和gid与容器内root的uid与gid相同。于是宿主机下数据卷及其文件的读写权限也被抬到了root

解决思路

总体思路

使数据卷及其内容的所有者的uid和gid在容器和宿主机上保持同步

已有方案的缺陷

已有方案为在使用命令docker run时使用-u-g传入指定uid与gid,于此同时使用-v指定数据卷挂载。然而,使用该方案,进入容器时会提示I have no name!,且除数据卷外没有任何权限。这是因为在容器视角下-u-g并没有相对应的用户。这不利于进一步运用容器开展科研工作。

改进方案

使用dockerfile构建”用户态“镜像。基于基础镜像,在镜像内创建与宿主机用

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值