我想将主机的用户/组与 docker 机器同步,以使(开发人员)能够编辑容器内部或外部的文件。有一些这样的想法:Handling Permissions with 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”。如果添加
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
的形式运行某些东西?当容器启动时,以及作为普通用户的引导脚本?看起来像 Dockerfile 的 CMD
不执行两个命令;我也不能将多个命令合并到一个脚本中,因为我需要以两个用户的身份运行 - 或者我可以吗?我知道我可以创建不同的图像,但想知道是否有更清洁的替代方案。
最佳答案
您可以将容器启动为 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
获得类似的行为.
关于docker - 如何以 root 用户身份(最初)为其他非 root 用户容器执行某些操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61366559/