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.
更新:当然你也可以使用容器的Docker管理命令来运行 this:
docker container exec -u 0 -it mycontainer bash
有几种方法可以做到。
到 运行 Docker 覆盖 USER 设置
docker exec -u 0 -it containerName bash
或
docker exec -u root -it --workdir / <containerName> bash
在 Docker 文件
中构建映像期间,设置必要的文件权限等
如果所有包在您的 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 行设置的密码。
生成密码哈希
您可以使用
以 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 不会让您使用简单的密码。
我正在使用一个 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.
更新:当然你也可以使用容器的Docker管理命令来运行 this:
docker container exec -u 0 -it mycontainer bash
有几种方法可以做到。
到 运行 Docker 覆盖 USER 设置
docker exec -u 0 -it containerName bash
或
docker exec -u root -it --workdir / <containerName> bash
在 Docker 文件
中构建映像期间,设置必要的文件权限等如果所有包在您的 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 行设置的密码。
您可以使用
以 root 身份通过 SSH 连接到 docker 容器docker exec -it --user root <container_id> /bin/bash
然后使用这个
更改root密码passwd root
输入
检查是否安装了sudosudo
如果没有安装请安装
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 不会让您使用简单的密码。