如何从脚本在 docker 容器中设置 root 密码?

Chr*_*ris 13 ssh bash passwd docker

我有一个在主机上运行并创建/启动/停止 docker 容器的脚本。我希望脚本更改容器内 root 用户的密码。

由于容器是 ssh 服务器,我尝试了: sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root'

但它不起作用。在继续并花更多时间调试它之前,我想知道是否有更聪明的方法来做到这一点。

我知道正确的“docker 方式”是制作一个由 Dockerfile 运行的脚本,该脚本从共享卷中提取密码并将其设置为 root 密码。这听起来很复杂,但我知道怎么做,并且适用于我使用的另一个 docker 映像。但我不想为这个而做。

我只需要一个使用 Docker 或 ssh 以非交互方式更改用户密码的命令。

Ulf*_*son 15

PASSWORD=$(zenity --password --title="Docker" 2>/dev/null)
Run Code Online (Sandbox Code Playgroud)

将打开一个弹出窗口,要求输入密码,然后返回。脚本中没有存储密码

如果您有一个需要设置密码的 docker 容器,但又不太关心安全性,您可以在 Dockerfile 中添加一条语句:

RUN echo "root:root" | chpasswd
Run Code Online (Sandbox Code Playgroud)

  • +1 如果它解释了 chpasswd 的 stdin,答案会更透明:`echo username:newpassword | chpasswd` (5认同)

use*_*494 8

这与 Docker 无关。您需要明确说明passwd您将提供来自stdin.

user='root'
pass='newpassword'
chpasswd <<<"$user:$pass"
Run Code Online (Sandbox Code Playgroud)

  • `--stdin` 已在较新的 Linux 系统上折旧。改用`chpasswd`:`echo username:newpassword | chpasswd` (16认同)

Chr*_*ris 1

这在 Ubuntu 14.04.4 LTS 上完美运行:

在重建容器的脚本(应该在“主机”上运行)中,添加以下行:

$PASS='<a-good-password>'
echo -e "$PASS\n$PASS" | sudo docker exec -i <container-id-or-name> passwd
Run Code Online (Sandbox Code Playgroud)