我正在使用一个Docker映像,它是使用USER命令构建的,以使用一个称为dev的非根用户。 在容器中,我是“dev”,但我想编辑/etc/hosts文件。

所以我需要是根。我正在尝试su命令,但要求我输入根密码。

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


当前回答

在某些情况下,您需要能够在用户下使用sudo做这样的事情(例如,在容器中运行的应用程序为用户提供了一个shell)。简单地添加到你的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生成密码哈希在这里或这里。

其他回答

docker exec -u 0 -it containername bash

我建议一个更好的解决方案是在启动容器时给docker run——add-host NAME:IP参数。这将更新/etc/hosts/文件,而不需要成为根用户。

否则,你可以通过给docker run -u USER标志来覆盖USER设置。然而,我不建议这样做,因为你不应该在一个运行的容器中更改东西。相反,在Dockerfile中进行更改并构建一个新映像。

当您启动容器时,您将是root,但您不知道root的pw是什么。要设置它为你知道的东西,只需使用“passwd root”。快照/提交容器以保存您的操作。

尝试以下命令获得根访问权限

$ sudo -i 

在运行的容器中创建/更改根密码

docker exec -itu 0 {container} passwd