Docker容器内的root密码

时间:2015-02-25 14:34:13

标签: docker

我正在使用使用USER命令构建的Docker镜像来使用名为dev的非root用户。 在容器内,我是" dev",但我想编辑/etc/hosts文件。

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

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

16 个答案:

答案 0 :(得分:348)

使用-u选项时,可以使用root用户(ID = 0)而不是提供的默认用户登录Docker容器。 E.g。

docker exec -u 0 -it mycontainer bash
  

root(id = 0)是容器中的默认用户。图片   开发者可以创建其他用户。这些用户可以通过   名称。传递数字ID时,用户不必存在   容器。

from Docker documentation

答案 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)

有几种方法可以做到。

  1. 运行Docker覆盖USER设置

    docker exec -u 0 -it containerName bash
    
  2. 在Docker文件中构建映像期间获取必要的文件权限等

  3. 如果您的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

了解如何为useradd herehere生成密码哈希。

答案 15 :(得分:0)

默认情况下,docker容器以root用户身份运行。

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

示例-

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