Answers:
使用该-u
选项时,您可以使用root用户(ID = 0)而不是提供的默认用户登录Docker容器。例如
docker exec -u 0 -it mycontainer bash
root(id = 0)是容器中的默认用户。图像开发人员可以创建其他用户。这些用户可以通过名称访问。传递数字ID时,用户不必在容器中。
docker run -u 0 -it mycontainer bash
最终,我决定重建我的Docker映像,以便通过我知道的方式更改root密码。
RUN echo 'root:Docker!' | chpasswd
要么
RUN echo 'Docker!' | passwd --stdin root
有两种方法可以做到这一点。
运行Docker覆盖USER设置
docker exec -u 0 -it containerName bash
要么
docker exec -u root -it --workdir / <containerName> bash
在Docker文件中构建映像期间,请获得必要的文件权限等
如果所有软件包在Linux映像中都可用,请chpasswd
在USER实用程序之前的dockerfile中。
我可以通过以下命令使用它。
root@gitnew:# docker exec -it --user $(username) $(containername) /bin/bash
正是由于我以非特权用户身份在容器中运行,所以无法运行root用户。
但是我不想像先前的答案所建议的那样重建新图像。
相反,我发现我可以使用“ nsenter”以根用户身份访问容器,请参见:https : //github.com/jpetazzo/nsenter
首先确定主机上容器的PID:
docker inspect --format {{.State.Pid}} <container_name_or_ID>
然后使用nsenter以根用户身份进入容器
nsenter --target <PID> --mount --uts --ipc --net --pid
sudo nsenter --target <PID> --mount --uts --ipc --net --pid
获取正在运行的容器的外壳程序并更改root密码:
docker exec -it <MyContainer> bash
root@MyContainer:/# passwd
Enter new UNIX password:
Retype new UNIX password:
``ubuntu''用户的密码是``ubuntu''(至少在docker中是ubuntu:14.04.03)。
注意:“ 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的最终依赖关系。
我建议一个更好的解决方案是--add-host NAME:IP
在启动容器时为docker run 提供参数。这将更新/etc/hosts/
文件,而无需成为root用户。
否则,您可以USER
通过将-u USER
标志赋予来覆盖设置docker run
。但我建议您不要这样做,因为您不应该真正更改正在运行的容器中的内容。相反,请在Dockerfile中进行更改并构建新映像。
-u
标志来更改用户。我认为您不能从容器内部进行操作。
默认情况下,Docker容器以root
用户身份运行。
如果您仍在使用容器,则可以使用exit
命令返回到root
(默认用户)用户,而不必再次运行容器。
范例-
[dev@6c4c86bccf93 ~]$ ls
[dev@6c4c86bccf93 ~]$ other-commands..
[dev@6c4c86bccf93 ~]$ exit
[root@6c4c86bccf93 /]# ls
尝试以下命令以获取root访问权限
$ sudo -i
在某些情况下,您需要能够在用户的指导下进行类似的操作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
您将能够sudo
使用第3行中设置的密码。
docker exec -u 0 -it mycontainer bash
。(见H6
的回答)