解决数据卷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构建”用户态“镜像。基于基础镜像,在镜像内创建与宿主机用户uidgid相同的用户和对应工作目录,定制该用户专属的镜像。下为例子:

FROM slicer/conda_maven:v1.2
ARG UID=1001
ARG GID=1002
ARG UNAME=user
RUN groupadd -g $GID -o $UNAME
RUN useradd -m -u $UID -g $GID -o -s /bin/bash -d /home/${UNAME} ${UNAME}
USER ${UNAME}
WORKDIR /home/${UNAME}
CMD /bin/bash

解释:基础镜像为slicer/conda_maven:v1.2(作者自制),UID和GID分别为作者账号在服务器上的uidgidUNAME是作者自定义的docker中的用户名(与宿主机无关。宿主机和容器只共享uidgid,不共享用户名。只要两个id相同,用户名起什么都行)。第一行RUN为创建gid用户组,第二行RUN为创建uid用户及其工作目录。USER指定该镜像默认启动用户(可在docker run时被覆盖),WORKDIR指定该镜像默认启动工作目录(可在docker run时被覆盖),CMD为该镜像默认启动命令(可在docker run时被覆盖)

接下来,在作者的服务器账户内构建(build)镜像,并依据自身需求(端口映射,数据卷挂载)等启动该镜像即可。如有sudo方面需求,还可以root身份登陆容器,并将作者创建的用户加入sudo用户组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常用设计模式总结

设计模式是在软件开发过程中经常遇到的问题的通用解决方案。它们是经过无数的验证和经验积累的最佳实践。 首先,设计模式是一些前人经验的一些总结,所以,当遇到相似的问题的时候,我们可以直接借鉴好的设计模式来实现,…

02 JDBC

文章目录 JDBC1、JDBC概述2、JDBC快速入门3、JDBC API详解4、数据库连接池5、案例代码 JDBC 1、JDBC概述 JDBC概念 (1)JDBC 就是使用Java语言操作关系型数据库的一套API (2)全称:( Java DataBase Connectivity ) Java…

docer笔记3

docker笔记3 容器基本命令 容器基本命令 下载镜像 docker pull cento新建容器并启动 docker run [可选参数] image# 参数说明 --name“Name” 容器名字 tomcat01 tomcat02 用来区分容器 -d 后台方式运行 -it 使用交互方式运行,进入容器查…

R-CNN 中的区域建议网络

区域建议网络(Region Proposal Network,RPN)是R-CNN(Regions with Convolutional Neural Networks)架构中的一个关键组件,特别是在Faster R-CNN中。RPN的主要任务是生成可能包含物体的区域提议,…

【基础篇】1.9 硬件基础(一)

写在前面: 学习STM32微控制器时,具备一定的硬件基础确实是有必要的。虽然STM32是一款功能强大的微控制器,但要充分利用其功能,理解其工作原理,以及进行有效的开发和调试,都需要对硬件有一定的了解。 了解电路的基本原理,有助于理解STM32的引脚配置、电源电路、信号调理…

【总结】cache映射对比

全相联映射的好处是可以随便放,不容易浪费,而直接映射的好处是容易定位,好找。 全相联映射的好处在于其灵活性。在这种映射方式下,主存中的任意一块都可以映射到Cache中的任意一块位置上。这意味着Cache的利用率相对较高&#xff…

什么是机器学习以及机器学习如今的社会现状!!

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

用太空办公桌spacedesk把废旧平板利用起来

正文共:1500 字 15 图,预估阅读时间:2 分钟 这些年积攒了不少电子设备,比如我现在手头上还有6部手机、4台电脑、2个平板。手机的话,之前研究过作为Linux服务器来使用(使用UserLAnd给华为平板装个Linux系统&…

Web 3.0革新:社交金融与边玩边赚开启用户数据主权时代

目录 Web 3.0与社交商业模式 传统社交平台的问题 去中心化社交创新 Mirror:去中心化内容发布平台 Lens Protocol:去中心化社交图谱 Maskbook:隐私保护的社交方式 Web 3.0与与边玩边赚模式 经济模型解析 新商业模式的探索 Axie Infi…

自然语言处理之RNN实现情感分类

前言 IMDB数据集经过分词处理后需要进行额外的预处理,包括将Token转换为index id,并统一文本序列长度。使用MindSpore.dataset接口进行预处理操作,包括text.Lookup和PadEnd接口。此外,还需要将label数据转换为float32格式。 模型…

Android中Activity生命周期详解

目录 一 典型情况二 异常情况2.1 系统配置改变2.2 系统资源不足kill掉低优先级activity Activity是四大组件之一,也是接触的最多的,一般来说Activity经常是与用户交互的界面。 一 典型情况 先看下google官网,其实已经很清楚了 再来个总结 …

mac docker no space left on device

mac 上 docker 拉取镜像报错 Error response from daemon: write /var/lib/docker/tmp/docker-export-3995807640/b8464f52498789c4ebbc063d508f04e8d2586567fbffa475e3cd9afd3c5a7cf2/layer.tar: no space left on device解决: 增加 docker 虚拟磁盘大小。如下图

(C语言) 文件读写基础

文章目录 🗂️前言📄ref📄访问标记🗃️文件访问标记 🗂️Code📄demo📄分点讲解🗃️打开/关闭🗃️写🗃️读 🗂️END🌟关注我 &#x1f…

自学Java第11Day

学习目标:面向对象进阶 学习内容:包、final、权限修饰符、代码块、抽象类、接口 学习时间: 下午 3 点-下午 6 点 学习产出: 什么的包? 包就是文件夹。用来管理各种不同功能的Java类,方便后期代码维护。 包…

pycharm关闭项目时,页面卡住了,怎么办?

问题 在关闭pycharm时,有时会遇到卡在退出进度条的界面,很讨厌,那我们要怎么办才能退出呢? 说明:本篇文章不是从根源上解决这个问题,无法避免这种情况。 解决方法 方法一: 在卡住时&#xf…

python实现图像特征提取算法1

python实现Marr-Hildreth算法、Canny边缘检测器算法 1.Marr-Hildreth算法详解算法步骤公式Python 实现详细解释优缺点 2.Canny边缘检测器算法详解算法步骤公式Python 实现详细解释优缺点 1.Marr-Hildreth算法详解 Marr-Hildreth算法是一个用于图像边缘检测的经典算法&#xff…

思维+01背包,LeetCode LCP 47. 入场安检

一、题目 1、题目描述 「力扣挑战赛」 的入场仪式马上就要开始了,由于安保工作的需要,设置了可容纳人数总和为 M 的 N 个安检室,capacities[i] 记录第 i 个安检室可容纳人数。安检室拥有两种类型: 先进先出:在安检室中…

Git笔记:(上传Git、Git获取文件版本、删除、统计)

目录 一、上传文件到github 1.1 配置用户名和邮箱 1.2 初始化本地仓库 1.3 添加项目目录下所有文件至本地仓库 1.4 使用如下命令加入注释提交 1.5 将本地仓库与远程仓库相连接 1.6 将本地仓库中的文件推送至指定的远程仓库中 二、git获取不同版本 2.1 git下载特定历史…

【SpringBoot3】全局异常处理

【SpringBoot3】全局异常处理 一、全局异常处理器step1:创建收入数字的页面step2:创建控制器,计算两个整数相除step3:创建自定义异常处理器step5:创建给用提示的页面step6:测试输入(10/0) 二、BeanValidato…

【Python正则表达式】:文本解析与模式匹配

文章目录 1.正则表达式2. re模块3.修饰符3.元字符3-1 字符匹配元字符3-2 重复次数限定元字符3-3 字符集合匹配元字符3-4 分组元字符3-5 边界匹配元字符3-6 字符类别匹配元字符 4.技巧4-1 贪婪与非贪婪 5.案例 1.正则表达式 正则表达式面向什么样的问题? 1、判断一个…