如何通过脚本在Docker容器中设置root密码?


11

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

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

但这不起作用。在继续并花费更多时间调试它之前,我想知道是否有更聪明的方法来进行此操作。

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

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

Answers:


9
PASSWORD=$(zenity --password --title="Docker" 2>/dev/null)

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

如果您有一个Docker容器需要在其中设置密码而不关心安全性,则可以在Dockerfile中添加一条语句:

RUN echo "root:root" | chpasswd

在我的两个Dockerfile中,我有相同的方法来像您一样设置方法(不同的项目,但基本部分相同)。但是一个正在工作(我可以同意),另一个不允许我。知道为什么吗?
ismailsunni

3
如果+1答案为chpasswd解释了stdin,则答案会更加透明:echo username:newpassword | chpasswd
Jonathan Komar,

5

这与Docker无关。您需要明确表示passwd要从提供密码stdin

echo 'newpassword' |passwd root --stdin

感谢您的输入。但是--ubuntu不支持--stdin。没用
克里斯

14
--stdin在较新的Linux系统上已贬值。chpasswd改为使用:echo username:newpassword | chpasswd
无法解决的问题

1

这在Ubuntu 14.04.4 LTS上完美运行:

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

$PASS='<a-good-password>'
echo -e "$PASS\n$PASS" | sudo docker exec -i <container-id-or-name> passwd

将实际密码放在脚本中是处理密码的非常不安全的方式。在脚本中放入适当的哈希密码并使用usermod而不是会更加安全passwd
卡巴斯德,2016年

好点,谢谢。在这种情况下,我可以接受这个风险,因为这只是一个只做很少事情的Docker容器。如果有人可以阅读脚本,那么他们已经拥有服务器的其余部分。不过,下次我会记住它。
克里斯(Chris
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.