我正在使用使用USER命令构建的Docker镜像来使用被调用的非root用户dev.在容器内部,我是"dev",但我想编辑该/etc/hosts文件.
所以我需要成为root用户.我正在尝试su命令,但我被要求输入root密码.
Docker容器中的默认root用户密码是什么?
H6.*_*H6. 407
使用该-u选项时,可以使用root用户(ID = 0)而不是提供的默认用户登录Docker容器.例如
docker exec -u 0 -it mycontainer bash
Run Code Online (Sandbox Code Playgroud)
root(id = 0)是容器中的默认用户.图像开发人员可以创建其他用户.这些用户可以通过名称访问.传递数字ID时,用户不必存在于容器中.
gui*_*ume 68
最终,我决定重建我的Docker镜像,以便我通过我知道的东西更改root密码.
RUN echo "root:Docker!" | chpasswd
Run Code Online (Sandbox Code Playgroud)
要么
RUN echo "Docker!" | passwd --stdin root
Run Code Online (Sandbox Code Playgroud)
Man*_*Ali 21
我能够使用下面的命令.
root@gitnew:# docker exec -it --user $(username) $(containername) /bin/bash
Run Code Online (Sandbox Code Playgroud)
Pro*_*imo 21
在正在运行的容器中创建/更改 root 密码
docker exec -itu root {containerName} passwd
Run Code Online (Sandbox Code Playgroud)
Mur*_*ade 18
有几种方法可以做到这一点.
运行Docker覆盖USER设置
docker exec -u 0 -it containerName bash
Run Code Online (Sandbox Code Playgroud)在Docker文件中构建映像期间,请获取必要的文件权限等
如果Linux映像chpasswd中的所有软件包都可用,请在USER实用程序之前的dockerfile中.
Ric*_*eld 16
我确实遇到了无法su到root的问题,因为我作为一个无特权的用户在容器中运行.
但我不想像以前的答案那样重建新图像.
相反,我发现我可以使用'nsenter'以root身份访问容器,请参阅:https://github.com/jpetazzo/nsenter
首先确定主机上容器的PID:
docker inspect --format {{.State.Pid}} <container_name_or_ID>
Run Code Online (Sandbox Code Playgroud)
然后使用nsenter以root身份输入容器
nsenter --target <PID> --mount --uts --ipc --net --pid
Run Code Online (Sandbox Code Playgroud)
小智 10
为了避免重建容器,请执行以下步骤:
docker exec -u 0 -it containerName bashsudo visudoyour_username ALL=(ALL:ALL) ALL
Run Code Online (Sandbox Code Playgroud)
就我而言,我使用 ubuntu 作为我的用户名,所以它会像这样:
ubuntu ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)
保存文件,重新附加到您的 docker 容器,然后 sudo 到您的心中大陆。
奖励:如果你想更新 docker 镜像,你可以执行以下操作:
docker commit containerName NewImage
Run Code Online (Sandbox Code Playgroud)
小智 8
'ubuntu' 用户的密码是 'ubuntu'(至少在 ubuntu 的 docker 中:14.04.03)。
注意:'ubuntu' 是在容器启动后创建的,所以,如果你只是这样做:
docker run -i -t --entrypoint /bin/bash ubuntu
Run Code Online (Sandbox Code Playgroud)
您将直接获得 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
Run Code Online (Sandbox Code Playgroud)
您必须重建对 ubuntu:latest 的最终依赖。
获取正在运行的容器的外壳程序并更改root密码:
docker exec -it <MyContainer> bash
root@MyContainer:/# passwd
Enter new UNIX password:
Retype new UNIX password:
Run Code Online (Sandbox Code Playgroud)
您可以使用 SSH 以 root 身份登录到 docker 容器
docker exec -it --user root <container_id> /bin/bash
Run Code Online (Sandbox Code Playgroud)
然后使用此更改root密码
passwd root
Run Code Online (Sandbox Code Playgroud)
通过输入确保安装了sudo检查
sudo
Run Code Online (Sandbox Code Playgroud)
如果未安装,请安装它
apt-get install sudo
Run Code Online (Sandbox Code Playgroud)
如果您想为用户dev授予 sudo 权限,您可以将用户 dev 添加到 sudo 组
usermod -aG sudo dev
Run Code Online (Sandbox Code Playgroud)
现在,您将能够在容器内从您的开发用户运行 sudo 级别的命令,否则您可以使用之前设置的密码切换到容器内的 root 用户。
为了测试它,以用户dev登录并列出通常只有 root 用户才能访问的根目录的内容。
sudo ls -la /root
Run Code Online (Sandbox Code Playgroud)
用于输入密码开发
如果您的用户在正确的组中并且您正确输入了密码,则您使用 sudo 发出的命令应该以 root 权限运行。
我建议更好的解决方案是--add-host NAME:IP在启动容器时向 docker run 提供参数。这将更新/etc/hosts/文件而无需成为 root。
否则,您可以USER通过将-u USER标志赋予 来覆盖该设置docker run。不过,我建议不要这样做,因为您不应该真正更改正在运行的容器中的内容。相反,在 Dockerfile 中进行更改并构建新映像。
| 归档时间: |
|
| 查看次数: |
206964 次 |
| 最近记录: |