以root用户之外的用户身份连接到docker容器

And*_*469 54 containers root docker

默认情况下运行时

docker run -it [myimage]

要么

docker attach [mycontainer]

您以root用户身份连接到终端,但我想以其他用户身份进行连接.这可能吗?

Lar*_*Cai 60

用于docker run:

只需添加选项--user <user>,即可在启动docker容器时更改为其他用户.

docker run -it --user nobody busybox
Run Code Online (Sandbox Code Playgroud)

对于docker attachdocker exec:

由于该命令用于附加/执行到现有进程,因此它直接使用当前用户.

docker run -it busybox  # CTRL-P/Q to quit
docker attach <container id>  # then you have root user
/ # id
uid=0(root) gid=0(root) groups=10(wheel)

docker run -it --user nobody busybox # CTRL-P/Q to quit
docker attach <container id>  
/ $ id
uid=99(nobody) gid=99(nogroup)
Run Code Online (Sandbox Code Playgroud)

如果你真的想要附加到你想拥有的用户,那么

  1. 从该用户开始run --user <user>或在您的Dockerfile使用中提及它USER
  2. 使用`su更改用户


Jas*_*son 39

您可以使用以下命令在正在运行的docker容器中运行shell:

docker exec -it --user root <container id> /bin/bash

  • @Stphane 情况并非总是如此,因为可以通过 `USER` 指令在 **Dockerfile** 中自定义默认用户,请参阅 https://docs.docker.com/engine/reference/builder/#user (9认同)
  • *root*是默认用户.当我必须以root用户身份运行命令时,可以省略`--user`选项. (2认同)

kli*_*iew 5

您可以USER在Dockerfile中指定.将使用该帐户执行所有后续操作.您可以USER在之前指定一行,CMD或者ENTRYPOINT如果您只想在启动容器时使用该用户(而不是在构建映像时).从结果图像启动容器时,您将作为指定用户附加.


Nur*_*hun 5

As an updated answer from 2020. --user , -u option is Username or UID (format: <name|uid>[:<group|gid>]).

Then, it works for me like this,

docker exec -it -u root:root container /bin/bash
Run Code Online (Sandbox Code Playgroud)

Reference: https://docs.docker.com/engine/reference/commandline/exec/