我想将主机的用户/组与docker机器同步,以使(开发人员)可以编辑容器内部或外部的文件。这里有一些想法:使用Docker Volumes处理权限,从而创建一个新用户。
我想尝试类似的方法,但我不想使用创建新用户的方式来修改现有用户usermod
:
usermod -d /${tmp} docker # avoid `usermod` from modifying permissions automatically.
usermod -u "${HOST_USER_ID}" docker
groupmod -g "${HOST_GROUP_ID}" docker
usermod -d ${HOME} docker
这个想法似乎可行,但是当容器以docker用户(我想要的)运行时,usermod
抱怨“此用户正在运行一个进程,因此无法更改用户ID”。
如果使用add sudo
,它将更改用户ID,但在下一次中断时sudo
将发生以下异常:sudo: unknown uid 1000: who are you?
作为避免上述问题的结果。
sudo usermod -d /${tmp} docker
sudo usermod -u "${HOST_USER_ID}" docker
sudo groupmod -g "${HOST_GROUP_ID}" docker # `sudo: unknown uid 1000: who are you?`
sudo usermod -d ${HOME} docker # `sudo: unknown uid 1000: who are you?`
root
在启动容器时是否可以像正常用户一样运行启动脚本?似乎DockerfileCMD
不会执行两个命令。我也不能将多个命令组合为一个脚本,而我需要以两个用户身份运行-或者可以吗?我知道我可以创建不同的图像,但是想知道是否还有更清洁的选择。
您可以以以下形式启动容器root
,允许ENTRYPOINT
脚本执行所需的任何更改,然后在执行容器时切换到非特权用户CMD
。例如,使用如下ENTRYPOINT
脚本:
#!/bin/sh
usermod -d /${tmp} docker
usermod -u "${HOST_USER_ID}" docker
groupmod -g "${HOST_GROUP_ID}" docker
exec runuser -u docker -- "$@"
如果没有该runuser
命令,则可以使用获得类似的行为su
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句