J C*_*lez 5 bash containers userid docker
我正在尝试使用给定用户运行带有自定义映像的 Docker 容器。我有一个entrypoint.sh, 可以根据 Docker 命令行提供的环境变量更改运行用户,-e USER=myuser.
我在主机上有完全相同的用户。这可以在不同的主机上完成,并且我可以确保该用户存在于我们使用的任何主机中。但我遇到了麻烦,因为我无法确保该用户的数字 ID 始终相同(例如 1001)。在 Docker 容器执行命令行中,我使用 挂载了一些本地文件夹-v <src>:<tgt>,容器中的应用程序在中创建了其他文件夹和文件<tgt>。
问题是,虽然主机和容器中的用户具有相同的名称(例如myuser),但它的数字 id 可以更改(例如5000在主机和容器中)1001容器中),因此在读取下面的文件和文件夹时会遇到问题挂载的路径。
确保在执行时主机和正在运行的容器中的用户名和用户 ID 相同的最佳解决方案是什么?
编辑
我发现我根本没有解释自己,而且把事情搞混了。我将尝试再次解释我的问题:
我确实创建了一个基于 Linux 的映像,在该映像中我: a) 安装了一组软件包root;b) 创建某个用户myuser,并USER <usr>在 Dockerfile 中切换到该用户;c) 以用户身份复制我自己的软件并安装在映像中myuser,并且该软件必须由该用户执行。
myuser我在另一台机器上创建了完全相同的用户
myuser在另一台计算机中从此映像启动一个容器,并与该容器共享主机文件系统中的一些文件夹(由用户拥有)。
myuser出现该问题的原因是,执行容器时,Docker 映像中用户的数字 id为 1001,而其他主机中的数字 id 为 5000。
一种解决方案是在任何主机上创建用户时强制数字 ID 相同。问题是我不能确定这在运行图像的主机中总是可能的。
小智 2
如果您使用基于 Linux 的映像(例如 ubuntu),在您的 Dockerfile 中,您将需要类似的内容
sudo addgroup --gid 3000 mygroupname &&
sudo adduser --uid 4000 --gid 3000 --disabled-password --gecos "" myusername
Run Code Online (Sandbox Code Playgroud)
您将必须切换到该用户,并且可能使用该用户的主目录作为您的工作目录。Dockerfile 中的行将是:
USER myusername
WORKDIR /home/myusername
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5736 次 |
| 最近记录: |