Docker容器中的根密码

我正在使用一个Docker映像,它是使用USER命令构建的,使用一个名为dev的非根用户。 在容器中,我是“dev”,但我想编辑/etc/hosts文件

所以我需要是根。我正在尝试su命令,但要求我输入根密码。

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

478416 次浏览

我建议一个更好的解决方案是在启动容器时给docker run --add-host NAME:IP参数。这将更新/etc/hosts/文件,而不需要成为根。

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

最后,我决定重新构建Docker映像,这样我就可以用我知道的东西来更改根密码。

RUN echo 'root:Docker!' | chpasswd

RUN echo 'Docker!' | passwd --stdin root

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

但我不想像之前的答案所暗示的那样重建一个新的形象。

相反,我发现我可以使用'nsenter'作为根访问容器,参见:https://github.com/jpetazzo/nsenter

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

docker inspect --format \{\{.State.Pid}} <container_name_or_ID>

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

nsenter --target <PID> --mount --uts --ipc --net --pid

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

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

 docker run -i -t --entrypoint /bin/bash  ubuntu

您将直接得到根提示符。在这里你可以强制修改root用户的密码,提交容器并将其标记为ubuntu:latest(使用-f),如下所示:

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

你必须重新构建你对ubuntu:latest的最终依赖。

当你使用-u选项时,你可以使用根用户(ID = 0)而不是提供的默认用户登录到Docker容器。如。

docker exec -u 0 -it mycontainer bash

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

from Docker documentation

更新:当然你也可以使用Docker容器管理命令来运行这个:

docker container exec -u 0 -it mycontainer bash

有几种方法可以做到。

  1. 运行覆盖USER设置的Docker

     docker exec -u 0 -it containerName bash
    

docker exec -u root -it --workdir / <containerName> bash
  1. 在Docker文件的镜像构建过程中,设置必要的文件权限等

  2. 如果所有的包都在你的Linux映像中可用,__abc0在dockerfile中USER实用程序之前。

完整参考:http://muralitechblog.com/root-password-of-a-docker-container/

我可以用下面的命令让它工作。

root@gitnew:# docker exec -it --user $(username) $(containername) /bin/bash
docker exec -u 0 -it containername bash

您可以在Dockerfile中使用USER根命令。

获取正在运行的容器的外壳并更改根通道。

docker exec -u 0 -it <MyContainer> bash


root@MyContainer:/# passwd
Enter new UNIX password:
Retype new UNIX password:

尝试以下命令获得根访问权限

$ sudo -i

当您启动容器时,您将是root,但您不知道root的pw是什么。要设置它为你知道的东西,只需使用“passwd root”。快照/提交容器以保存您的操作。

默认情况下,docker容器以root用户运行。

如果你仍在使用容器,你可以使用exit命令返回到root(默认用户)用户,而不是再次运行容器。

的例子,

[dev@6c4c86bccf93 ~]$ ls
[dev@6c4c86bccf93 ~]$ other-commands..
[dev@6c4c86bccf93 ~]$ exit
[root@6c4c86bccf93 /]# ls

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

docker exec -itu 0 {container} passwd

在某些情况下,你需要能够在sudo用户下做这样的事情(例如,在容器中运行的应用程序为用户提供了一个shell)。简单地添加到你的Dockerfile:

RUN apt-get update         # If necessary
RUN apt-get install sudo   # If your base image does not contain sudo.
RUN useradd -m -N -s /bin/bash -u 1000 -p '$1$miTOHCYy$K.c4Yw.edukWJ7z9rbpTZ0' user && \
usermod -aG sudo user  # Grant sudo to the user
USER user

现在,在默认映像用户user下,您将能够使用在第3行设置的密码sudo

参见如何为useradd 在这里在这里生成密码哈希。

您可以以根用户身份SSH进入docker容器

docker exec -it --user root <container_id> /bin/bash

然后使用此命令修改root密码

passwd root

通过输入确保sudo已安装

sudo

如果没有安装,请安装

apt-get install sudo

如果你想赋予用户dev sudo权限,你可以将用户dev添加到sudo组中

usermod -aG sudo dev

现在你可以在容器内从dev用户运行sudo级别的命令,或者你可以使用之前设置的密码在容器内切换到root。

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

sudo ls -la /root

输入dev的密码

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

在docker容器中设置固定的根密码可能会危及系统,因此不应该使用。相反,你可以用:

 docker exec -itu 0 CONTAINER_ID bash

当容器启动并运行时,只要您希望访问容器的根权限。

上面的命令假设您想要运行bash作为您的shell。 我不使用MS Windows,但我猜如果你在MS Windows机器上,你可能会尝试CMD或CMD. exe而不是bash

上面的一些答案是不错的,尤其是像这样的:

docker exec -u root -it CONTAINERID /bin/bash

从答案的第一列中获取CONTAINERID:

docker ps

这让你扎根,你可以做任何你想做的事。但是只有如果该命令存在于容器中。为了做一些像修改根密码这样简单的事情(正如上面许多人建议的那样),我不得不关闭我的VPN并做:

yum install -y passwd

当我在那里时,我安装了vim和sudo,以备将来需要。

请注意:passwd不会让您使用简单的密码。

你也可以这样使用它(如果你需要确认密码)

(echo 'myrootpassword'; echo 'myrootpassword') | passwd root

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

  1. docker exec -u 0 -it containerName bash
  2. sudo visudo
  3. 在文件末尾添加如下内容:
your_username ALL=(ALL:ALL) ALL

在我的例子中,我使用ubuntu作为我的用户名,所以它是这样的:

ubuntu ALL=(ALL) NOPASSWD: ALL

保存文件,重新连接到docker容器,并将sudo连接到您的hearts大陆。

奖金:如果你想要更新docker镜像,你可以做以下事情:

docker commit containerName NewImage