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

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

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


当前回答

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

docker exec -itu 0 {container} passwd

其他回答

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

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

的例子,

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

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

docker exec -u 0 -it containerName bash sudo visudo 在文件末尾添加如下内容:

your_username ALL=(ALL:ALL) ALL

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

ubuntu ALL=(ALL) NOPASSWD: ALL

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

好处:如果你想更新docker镜像,你可以做以下事情:

docker commit containerName NewImage

我确实遇到了无法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 exec -itu 0 {container} passwd

您可以以根用户身份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

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

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

sudo ls -la /root

输入dev的密码

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