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

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

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


当前回答

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

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

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

docker ps

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

yum install -y passwd

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

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

其他回答

我确实遇到了无法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

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

RUN echo 'root:Docker!' | chpasswd

or

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

在某些情况下,您需要能够在用户下使用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生成密码哈希在这里或这里。

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

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

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

的例子,

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