我正在使用使用USER命令构建的Docker镜像来使用名为dev
的非root用户。
在容器内,我是" dev",但我想编辑/etc/hosts
文件。
所以我需要成为root用户。我正在尝试su命令,但我要求输入root密码。
Docker容器中的默认root用户密码是什么?
答案 0 :(得分:348)
使用-u
选项时,可以使用root用户(ID = 0)而不是提供的默认用户登录Docker容器。 E.g。
docker exec -u 0 -it mycontainer bash
root(id = 0)是容器中的默认用户。图片 开发者可以创建其他用户。这些用户可以通过 名称。传递数字ID时,用户不必存在 容器。
答案 1 :(得分:59)
最终,我决定重建我的Docker镜像,以便用我知道的东西更改root密码。
RUN echo "root:Docker!" | chpasswd
或
RUN echo "Docker!" | passwd --stdin root
答案 2 :(得分:16)
我确实遇到了无法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
答案 3 :(得分:16)
在正在运行的容器中创建/更改root密码
docker exec -itu root {containerName} passwd
答案 4 :(得分:14)
docker exec -u 0 -it containername bash
答案 5 :(得分:13)
我能够使用下面的命令。
root@gitnew:# docker exec -it --user $(username) $(containername) /bin/bash
答案 6 :(得分:10)
有几种方法可以做到。
运行Docker覆盖USER设置
docker exec -u 0 -it containerName bash
在Docker文件中构建映像期间获取必要的文件权限等
如果您的Linux映像中有所有软件包,请在USER实用程序之前的dockerfile中chpasswd
。
答案 7 :(得分:4)
获取正在运行的容器的shell并更改root密码:
docker exec -it <MyContainer> bash
root@MyContainer:/# passwd
Enter new UNIX password:
Retype new UNIX password:
答案 8 :(得分:4)
您可以使用root作为SSH身份以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
的密码如果您的用户在适当的组中,并且您正确输入了密码,则使用sudo发出的命令应以root特权运行。
答案 9 :(得分:2)
我建议更好的解决方案是在启动容器时为docker run提供--add-host NAME:IP
参数。这将更新/etc/hosts/
文件而无需成为root。
否则,您可以通过向USER
提供-u USER
标记来覆盖docker run
设置。不过我会建议不要这样做,因为你不应该在正在运行的容器中改变它。而是在Dockerfile中进行更改并构建新映像。
答案 10 :(得分:2)
密码是&#39; ubuntu&#39;为了'ubuntu&#39;用户(至少在ubuntu的docker中:14.04.03)。
NB:&#39; ubuntu&#39;在容器启动后创建,如果你这样做:
docker run -i -t --entrypoint /bin/bash ubuntu
您将直接获得根提示。从那里你可以强制更改root密码,提交容器并选择将其标记(使用-f)到ubuntu:最新如下:
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。
上重建最终的依赖项答案 11 :(得分:1)
您可以在Dockerfile中使用USER root命令。
答案 12 :(得分:1)
尝试以下命令获取root访问权限
$ sudo -i
答案 13 :(得分:1)
启动容器时,您将是root用户,但您将不知道root用户的pw是什么。要将其设置为您知道的内容,只需使用“ passwd root”。快照/提交容器以保存操作。
答案 14 :(得分:1)
在某些情况下,您需要能够在具有sudo
的用户下执行类似的操作(例如,容器中运行的应用程序为用户提供了外壳)。只需将其添加到您的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 '$1$miTOHCYy$K.c4Yw.edukWJ7z9rbpTZ0' user && \
usermod -aG sudo user # Grant sudo to the user
USER user
现在,在默认图像用户user
下,您将能够使用第3行设置的密码sudo
。
答案 15 :(得分:0)
默认情况下,docker容器以root
用户身份运行。
如果您仍在使用容器,则可以使用exit
命令返回到root
(默认用户)用户,而不必再次运行容器。
示例-
[dev@6c4c86bccf93 ~]$ ls
[dev@6c4c86bccf93 ~]$ other-commands..
[dev@6c4c86bccf93 ~]$ exit
[root@6c4c86bccf93 /]# ls