我正在尝试使用给定用户运行带有自定义映像的Docker容器。我有一个entrypoint.sh
,它可以根据Docker命令行提供的环境变量用-e USER=myuser
更改正在运行的用户。
我在主机上拥有相同的用户。这可以在不同的主机上完成,我可以确保这个用户存在于我们使用的任何主机中。但我遇到了麻烦,因为我无法确保此用户的数字ID始终相同(比如说1001)。在Docker容器执行命令行中,我使用-v <src>:<tgt>
安装了一些本地文件夹,容器中的应用程序在<tgt>
中创建了其他文件夹和文件。
问题是虽然主机和容器中的用户具有相同的名称(比如myuser
),但它的数字ID可以改变(比如主机中的5000
和容器中的1001
),所以我在阅读文件时遇到问题和已安装路径下的文件夹。
确保在执行时不仅主机和运行容器中的用户名和用户ID都相同的最佳解决方案是什么?
编辑
我看到我没有解释自己的所有事情和混合的事情。我会再次尝试解释我的问题:
root
; b)创建了某个用户myuser
,并在Dockerfile中使用USER <usr>
切换到该用户; c)复制我自己的软件并安装在图像中,作为用户myuser
,该软件必须由该用户执行。myuser
myuser
拥有)。问题的出现是因为用户myuser
的数字id在Docker镜像中是1001,在另一个主机中是5000,当执行容器时。
一种解决方案是在任何主机中创建用户时强制数字ID相同。问题是我不能确定在运行映像的主机中总能实现这一点。
您应该使用命令USER
在Dockerfile中指定用户。选项-e USER=myuser
将创建一个环境变量,但默认情况下它不会更改用户。
如果您使用的是基于linux的映像(比如说ubuntu),那么在Dockerfile中,您将需要类似的东西
sudo addgroup --gid 3000 mygroupname &&
sudo adduser --uid 4000 --gid 3000 --disabled-password --gecos "" myusername
您将不得不切换到该用户,并可能将该用户的主目录用作您的工作目录。 Dockerfile中的行将是:
USER myusername
WORKDIR /home/myusername