Docker:写入不同UID为sudo的共享卷

  • 本文关键字:sudo 共享 UID Docker docker
  • 更新时间 :
  • 英文 :


我有一个绑定挂载卷的docker。绑定挂载卷的权限属于用户"jep"UID为1005,而图像中的用户名为";user"1000作为UID,属于sudoers组。所以当运行这样的容器时:

docker run -it --rm -v "$(pwd):/home/user/ws:rw" image

当我尝试做任何事情时,我得到权限错误:

user@f029839700b8 ~/ws: mkdir tmp
mkdir: cannot create directory 'tmp': Permission denied

我试着运行一个新的容器:

docker run -it --rm -u 1005 -v "$(pwd):/home/user/ws:rw" image

所以我不再有权限问题了,然而,容器内的用户没有名字,因此我不能运行任何sudo命令:

I have no name!@297c1088b254:/home/user/ws$sudo
sudo: you do not exist in the passwd database

如何在不更改主机中绑定卷的所有者的情况下解决此问题?我不能修改图像。

  1. 创建dockerfile,使用FROM <unchangeable image>,更改用户并构建自己的映像
  2. 如果应用程序不需要sudo,你只需要它用于控制台,你可以显式地给sudo用户:docker exec -u 1000 ..
  3. 要在docker容器中使用本地用户,您可以在容器中挂载本地用户/组。然后他们就知道了。由于只读标志,它在安全方面是相当好的…
docker run -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro -v /etc/shadow:/etc/shadow:ro
# Either (for current user)
-u $(id -u):$(id -g) --group-add sudo
#or manually
-u 1005:<gid> --group-add sudo

If all no:表示不可能用其他用户挂载。人们一直在为这样的功能而哭泣。比如这里或者这里

最新更新