Docker容器内的root密码

gui*_*ume 210 docker

我正在使用使用USER命令构建的Docker镜像来使用被调用的非root用户dev.在容器内部,我是"dev",但我想编辑该/etc/hosts文件.

所以我需要成为root用户.我正在尝试su命令,但我被要求输入root密码.

Docker容器中的默认root用户密码是什么?

H6.*_*H6. 407

使用该-u选项时,可以使用root用户(ID = 0)而不是提供的默认用户登录Docker容器.例如

docker exec -u 0 -it mycontainer bash
Run Code Online (Sandbox Code Playgroud)

root(id = 0)是容器中的默认用户.图像开发人员可以创建其他用户.这些用户可以通过名称访问.传递数字ID时,用户不必存在于容器中.

来自Docker文档

  • 当你输入上面的commad时,指定你需要mycontainer启动和运行会很好.它使用2个不同的终端工作:一个用于mycontainer,另一个用于此命令.否则它要求mycontainer以分离的方式运行. (5认同)
  • 对于图像,使用`docker run -u 0 -it mycontainer bash` (5认同)
  • 这应该是最重要的答案 (2认同)
  • @High6,当你说“你可以登录到 Docker 镜像...”时,我认为你的意思是“你可以登录到 Docker _Container_”。 (2认同)

gui*_*ume 68

最终,我决定重建我的Docker镜像,以便我通过我知道的东西更改root密码.

RUN echo "root:Docker!" | chpasswd
Run Code Online (Sandbox Code Playgroud)

要么

RUN echo "Docker!" | passwd --stdin root 
Run Code Online (Sandbox Code Playgroud)

  • 我试过这个,但它不适用于基于CentOS 6的docker.此命令是否适用于基于CentOS的docker? (5认同)

Man*_*Ali 21

我能够使用下面的命令.

root@gitnew:# docker exec -it --user $(username) $(containername) /bin/bash
Run Code Online (Sandbox Code Playgroud)


Pro*_*imo 21

在正在运行的容器中创建/更改 root 密码

docker exec -itu root {containerName} passwd
Run Code Online (Sandbox Code Playgroud)

  • 注意:passwd 不是您的密码。从字面上看,您必须输入 passwd,然后它会要求您输入密码。 (3认同)
  • 你救了我的培根 (2认同)
  • 这应该是一个可以接受的答案! (2认同)

Mur*_*ade 18

有几种方法可以做到这一点.

  1. 运行Docker覆盖USER设置

    docker exec -u 0 -it containerName bash
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在Docker文件中构建映像期间,请获取必要的文件权限等

  3. 如果Linux映像chpasswd中的所有软件包都可用,请在USER实用程序之前的dockerfile中.


Ric*_*eld 16

我确实遇到了无法su到root的问题,因为我作为一个无特权的用户在容器中运行.

但我不想像以前的答案那样重建新图像.

相反,我发现我可以使用'nsenter'以root身份访问容器,请参阅:https://github.com/jpetazzo/nsenter

首先确定主机上容器的PID:

docker inspect --format {{.State.Pid}} <container_name_or_ID>
Run Code Online (Sandbox Code Playgroud)

然后使用nsenter以root身份输入容器

nsenter --target <PID> --mount --uts --ipc --net --pid
Run Code Online (Sandbox Code Playgroud)

  • 由于这个答案是写的,docker添加了命令exec来做与nsenter基本相同的事情,但更容易和更清洁.只是那些现在通过搜索找到这个问题的人的数据点.命令是"docker exec -it <containername> <command>"(命令通常是/ bin/bash,但你当然可以随心所欲). (4认同)

use*_*364 16

docker exec -u 0 -it containername bash
Run Code Online (Sandbox Code Playgroud)


小智 10

为了避免重建容器,请执行以下步骤:

  1. docker exec -u 0 -it containerName bash
  2. sudo visudo
  3. 将以下内容添加到文件末尾:
your_username ALL=(ALL:ALL) ALL
Run Code Online (Sandbox Code Playgroud)

就我而言,我使用 ubuntu 作为我的用户名,所以它会像这样:

ubuntu ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

保存文件,重新附加到您的 docker 容器,然后 sudo 到您的心中大陆。

奖励:如果你想更新 docker 镜像,你可以执行以下操作:

docker commit containerName NewImage
Run Code Online (Sandbox Code Playgroud)


小智 8

'ubuntu' 用户的密码是 'ubuntu'(至少在 ubuntu 的 docker 中:14.04.03)。

注意:'ubuntu' 是在容器启动后创建的,所以,如果你只是这样做:

 docker run -i -t --entrypoint /bin/bash  ubuntu     
Run Code Online (Sandbox Code Playgroud)

您将直接获得 root 提示。从那里,您可以强制更改 root 的密码,提交容器并可选择将其(使用 -f)标记为 ubuntu:latest,如下所示:

root@ec384466fbbb:~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@ec384466fbbb:~# exit

% docker commit ec3844
5d3c03e7d6d861ce519fe33b184cd477b8ad03247ffe19b2a57d3f0992d71bca

docker tag -f 5d3c ubuntu:latest
Run Code Online (Sandbox Code Playgroud)

您必须重建对 ubuntu:latest 的最终依赖。


Dim*_*Dak 8

获取正在运行的容器的外壳程序并更改root密码:

docker exec -it <MyContainer> bash

root@MyContainer:/# passwd
Enter new UNIX password:
Retype new UNIX password:
Run Code Online (Sandbox Code Playgroud)

  • @MEMark 如果您是root,则不会询问您当前的密码... (3认同)

Cha*_*nka 8

您可以使用 SSH 以 root 身份登录到 docker 容器

docker exec -it --user root <container_id> /bin/bash
Run Code Online (Sandbox Code Playgroud)

然后使用此更改root密码

passwd root
Run Code Online (Sandbox Code Playgroud)

通过输入确保安装了sudo检查

sudo
Run Code Online (Sandbox Code Playgroud)

如果未安装,请安装它

apt-get install sudo
Run Code Online (Sandbox Code Playgroud)

如果您想为用户dev授予 sudo 权限,您可以将用户 dev 添加到 sudo 组

usermod -aG sudo dev
Run Code Online (Sandbox Code Playgroud)

现在,您将能够在容器内从您的开发用户运行 sudo 级别的命令,否则您可以使用之前设置的密码切换到容器内的 root 用户。

为了测试它,以用户dev登录并列出通常只有 root 用户才能访问的根目录的内容。

sudo ls -la /root
Run Code Online (Sandbox Code Playgroud)

用于输入密码开发

如果您的用户在正确的组中并且您正确输入了密码,则您使用 sudo 发出的命令应该以 root 权限运行。


Adr*_*uat 5

我建议更好的解决方案是--add-host NAME:IP在启动容器时向 docker run 提供参数。这将更新/etc/hosts/文件而无需成为 root。

否则,您可以USER通过将-u USER标志赋予 来覆盖该设置docker run。不过,我建议不要这样做,因为您不应该真正更改正在运行的容器中的内容。相反,在 Dockerfile 中进行更改并构建新映像。