【发布时间】:2019-02-19 05:31:53
【问题描述】:
我正在尝试使用给定用户运行具有自定义映像的 Docker 容器。我有一个entrypoint.sh,它可以根据Docker命令行提供的环境变量来改变运行用户,-e USER=myuser。
我在主机上有相同的用户。这可以在不同的主机上完成,我可以确保这个用户存在于我们使用的任何主机中。但是我遇到了麻烦,因为我无法确保该用户的数字 id 始终相同(例如 1001)。在 Docker 容器执行命令行中,我用-v <src>:<tgt> 挂载了一些本地文件夹,容器中的应用程序在<tgt> 中创建了额外的文件夹和文件。
问题在于,尽管主机中的用户和容器中的用户具有相同的名称(例如 myuser),但它的数字 id 可以更改(例如主机中的 5000 和容器中的 1001 ),所以在读取挂载路径下的文件和文件夹时出现问题。
在执行时,确保主机和运行容器中的用户名和用户 ID 都相同的最佳解决方案是什么?
编辑
我知道我根本没有解释自己,而且混杂了一些东西。我将尝试再次解释我的问题:
我确实创建了一个基于 Linux 的映像,并且在这个映像中我: a) 安装了一组包为
root; b) 创建了某个用户myuser,并在Dockerfile中切换到了USER <usr>的那个用户; c) 以myuser用户身份复制我自己的软件并安装在镜像中,并且该软件必须由该用户执行。我在另一台机器上创建了同一个用户
myuser在另一台机器上从此映像启动了一个容器,并与该容器共享主机文件系统中的一些文件夹(由用户
myuser拥有)。
问题出现是因为执行容器时用户myuser 的数字ID 在Docker 映像中为1001,而在其他主机中为5000。
一种解决方案是在任何时候在任何主机上创建用户时强制数字 id 相同。问题是我不能确定这在运行图像的主机中是否总是可行的。
【问题讨论】:
标签: bash docker containers userid