Docker 容器内的根密码

Root password inside a Docker container

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

所以我需要成为 root。我正在尝试 su 命令,但系统要求我输入 root 密码。

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

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

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

最终,我决定重建我的 Docker 映像,这样我就可以更改 root 密码。

RUN echo 'root:Docker!' | chpasswd

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

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

但我不想像以前的答案所暗示的那样重建新图像。

相反,我发现我可以使用 'nsenter' 作为 root 访问容器,请参阅: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'(对于 ubuntu 至少在 docker :14.04.03)。

注意:'ubuntu' 是在容器启动后创建的,因此,如果您这样做:

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

您将直接获得 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

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

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

docker exec -u 0 -it mycontainer bash

root (id = 0) is the default user within a container. The image developer can create additional users. Those users are accessible by name. When passing a numeric ID, the user does not have to exist in the container.

from Docker documentation

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

docker container exec -u 0 -it mycontainer bash

有几种方法可以做到。

  1. 到 运行 Docker 覆盖 USER 设置

     docker exec -u 0 -it containerName bash
    

docker exec -u root -it --workdir / <containerName> bash
  1. 在 Docker 文件

    中构建映像期间,设置必要的文件权限等
  2. 如果所有包在您的 Linux 图像中可用,chpasswd在 USER 实用程序之前的 dockerfile 中。

完整参考: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 root 命令。

获取 shell 的 运行 容器并更改根通道。

docker exec -u 0 -it <MyContainer> bash

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

尝试以下命令获取 root 访问权限

$ sudo -i 

当您启动容器时,您将成为root,但您不知道root 的密码是什么。要将其设置为您知道的内容,只需使用 "passwd root"。 Snapshot/commit 用于保存您的操作的容器。

默认 docker 个容器 运行 作为 root 用户。

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

例子-

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

To create/change a root password in a running container

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 '$miTOHCYy$K.c4Yw.edukWJ7z9rbpTZ0' user && \
    usermod -aG sudo user  # Grant sudo to the user
USER user

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

查看如何为 useradd here or here.

生成密码哈希

您可以使用

以 root 身份通过 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 级命令,否则您可以通过使用您之前设置的密码。

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

sudo ls -la /root

输入 dev

的密码

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

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

 docker exec -itu 0 CONTAINER_ID bash

每当您想要对容器进行 root 访问时,容器已启动并且 运行正在运行。

以上命令假定您希望 运行 bash 作为您的 shell。 我不使用 MS Windows,但我想如果您使用的是 MS Windows 机器,您可能会尝试使用 CMD 或 CMD.EXE 而不是 bash。

上面的一些答案很好,尤其是那些:

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

您从以下答案的第一列获取 CONTAINERID 的位置:

docker ps

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

yum install -y passwd

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

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