我正在使用一个使用USER命令构建的Docker镜像,以使用名为dev
的非root用户。
在容器内部,我是“dev”,但我想编辑/etc/hosts
文件。
所以我需要成为超级用户。 我尝试su命令,但要求输入root密码。
在Docker容器中,默认的root用户密码是什么?
我正在使用一个使用USER命令构建的Docker镜像,以使用名为dev
的非root用户。
在容器内部,我是“dev”,但我想编辑/etc/hosts
文件。
所以我需要成为超级用户。 我尝试su命令,但要求输入root密码。
在Docker容器中,默认的root用户密码是什么?
-u
选项时。例如:docker exec -u 0 -it mycontainer bash
root(id = 0)是容器内的默认用户。镜像开发者可以创建其他用户,这些用户可通过名称访问。当传递数字ID时,该用户不必存在于容器中。
更新:当然,您也可以使用用于容器管理的 Docker 命令来运行此命令:
docker container exec -u 0 -it mycontainer bash
docker run -u 0 -it mycontainer bash
。该命令表示以 root 用户身份进入名为 "mycontainer" 的容器,并启动 Bash 终端。 - Pavel 'PK' Kaminskykubectl
,那么这不是一个选项。 - Arber最终,我决定重建我的Docker镜像,这样我就可以将root密码更改为我知道的东西。
RUN echo 'root:Docker!' | chpasswd
或者RUN echo 'Docker!' | passwd --stdin root
Docker!
密码。为了安全起见,可以采用在Docker和Compose v1中构建安全的方式中描述的docker build --secret
方法。 - Peter V. Mørch有几种方法可以实现。
覆盖 USER 设定以运行 Docker。
docker exec -u 0 -it containerName bash
或者
docker exec -u root -it --workdir / <containerName> bash
在Docker文件中进行镜像构建期间,进行必要的文件权限设置等操作。
如果您的Linux镜像中已有所有包,则可以在使用USER工具之前的dockerfile中使用chpasswd命令。
完整参考文献:http://muralitechblog.com/root-password-of-a-docker-container/
在运行中的容器中创建/更改根密码
docker exec -itu 0 {container} passwd
我能够使用以下命令使其运行。
root@gitnew:# docker exec -it --user $(username) $(containername) /bin/bash
docker exec -u 0 -it <MyContainer> bash
root@MyContainer:/# passwd
Enter new UNIX password:
Retype new UNIX password:
docker exec -u 0 -it containername bash
由于我在容器中作为非特权用户运行,所以我无法使用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
sudo nsenter --target <PID> --mount --uts --ipc --net --pid
。 - peater您可以使用以下命令以 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级别的命令,或者您可以使用先前设置的密码切换到容器内的root用户。
要进行测试,请以用户dev身份登录并列出通常只能由root用户访问的根目录内容。
sudo ls -la /root
输入dev的密码
如果您的用户在正确的组内并且您正确输入了密码,则以root权限运行sudo命令。
在Ubuntu 14.04.03的docker中,'ubuntu'用户的密码为'ubuntu'。
注意:'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上重新构建您的最终依赖项。
docker exec -u 0 -it mycontainer bash
。(请参见“H6”的回答) - Sławomir Lenart