Root password inside a Docker container
我正在使用使用USER命令构建的Docker映像,以使用名为
在容器内,我是" dev",但我想编辑
所以我需要成为根。 我正在尝试su命令,但要求输入root密码。
Docker容器中默认的root用户密码是什么?
使用
1 | 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文档
更新:当然,您也可以对容器使用Docker管理命令来运行此命令:
最终,我决定重建我的Docker映像,以便通过我知道的方式更改root密码。
1 | RUN echo 'root:Docker!' | chpasswd |
要么
1 | RUN echo 'Docker!' | passwd --stdin root |
有两种方法可以做到这一点。
运行Docker覆盖USER设置
1 | docker exec -u 0 -it containerName bash |
要么
1 | docker exec -u root -it --workdir / <containerName> bash |
在Docker文件中构建映像期间,请获得必要的文件权限等
如果您的Linux映像中所有软件包均可用,请在Docker档案中
有关完整参考,请访问:http://muralitechblog.com/root-password-of-a-docker-container/
我可以通过以下命令使用它。
1 | root@gitnew:# docker exec -it --user $(username) $(containername) /bin/bash |
1 | docker exec -u 0 -it containername bash |
正是由于我以非特权用户身份在容器中运行,所以无法运行root用户。
但我不想像先前的答案所建议的那样重建新的映像。
相反,我发现我可以使用'nsenter'作为根用户访问该容器,请参见:https://github.com/jpetazzo/nsenter
首先确定主机上容器的PID:
1 | docker inspect --format {{.State.Pid}} <container_name_or_ID> |
然后使用nsenter以根用户身份进入容器
1 | nsenter --target <PID> --mount --uts --ipc --net --pid |
在正在运行的容器中创建/更改root密码
1 | docker exec -itu root {containerName} passwd |
获取您正在运行的容器的shell并更改root pass。
1 2 3 4 5 | docker exec -it <MyContainer> bash root@MyContainer:/# passwd Enter new UNIX password: Retype new UNIX password: |
``ubuntu''用户的密码是``ubuntu''(至少在docker中是ubuntu:14.04.03)。
注意:" ubuntu"是在容器启动后创建的,因此,如果您这样做:
1 | docker run -i -t --entrypoint /bin/bash ubuntu |
您将直接获得root提示。从那里,您可以强制更改root的密码,提交容器并选择(使用-f)将其标记为ubuntu:latest,如下所示:
1 2 3 4 5 6 7 8 9 10 | 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的最终依赖关系。
您可以通过使用root用户身份以SSH方式登录docker容器
1 | docker exec -it --user root <container_id> /bin/bash |
然后使用它更改root密码
1 | passwd root |
通过输入以下命令确保已安装sudo
1 | sudo |
如果未安装,请安装
1 | apt-get install sudo |
如果要授予用户dev的sudo权限,可以将用户dev添加到sudo组
1 | usermod -aG sudo dev |
现在,您可以在容器内运行来自dev用户的sudo级别命令,也可以使用先前设置的密码切换到容器内的root用户。
要测试它,请以用户dev用户身份登录并列出根目录的内容,该目录通常只能由root用户访问。
1 | sudo ls -la /root |
输入开发人员的密码
如果您的用户在适当的组中,并且您正确输入了密码,则使用sudo发出的命令应以root特权运行。
我建议一个更好的解决方案是在启动容器时为docker run提供
否则,可以通过将
您可以在Dockerfile中使用USER root命令。
启动容器时,您将是root用户,但您将不知道root用户的pw是什么。要将其设置为您知道的内容,只需使用" passwd root"。快照/提交容器以保存操作。
默认情况下,Docker容器以
如果您仍在使用容器,则可以使用
范例-
1 2 3 4 | [dev@6c4c86bccf93 ~]$ ls [dev@6c4c86bccf93 ~]$ other-commands.. [dev@6c4c86bccf93 ~]$ exit [root@6c4c86bccf93 /]# ls |
在某些情况下,您需要能够在具有
1 2 3 4 5 | 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 |
现在,在默认图像用户
在此处或此处查看如何为
尝试以下命令以获取root访问权限
1 | $ sudo -i |