Wie kann ich das Root-Passwort in einem Docker-Container über ein Skript festlegen?

Ich habe ein Skript, das auf dem Host ausgeführt wird und einen Docker-Container erstellt / startet / stoppt. Ich möchte, dass das Skript das Kennwort des Root-Benutzers im Container ändert.

Da der Container ein SSH-Server ist, habe ich es versucht:sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root'

aber es funktioniert nicht. Bevor ich weitermache und mehr Zeit mit dem Debuggen verbringe, würde ich gerne wissen, ob es einen intelligenteren Weg gibt, dies zu tun.

Ich verstehe, dass der richtige "Docker-Weg" darin besteht, ein Skript zu erstellen, das von der Docker-Datei ausgeführt wird, das das Kennwort von einem freigegebenen Volume abruft und es als Root-Kennwort festlegt. Das klingt kompliziert, aber ich weiß, wie es geht und funktioniert gut für ein anderes Docker-Image, das ich verwende. Aber ich will es nicht für diesen tun.

Ich brauche nur einen Befehl, der Docker oder ssh verwendet, um das Kennwort eines Benutzers nicht interaktiv zu ändern.

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

öffnet ein Popup, fragt nach dem Passwort und kehrt zurück it.No im Skript gespeichertes Passwort

Wenn Sie einen Docker-Container haben, in dem Sie ein Kennwort festlegen müssen, ohne sich zu sehr um die Sicherheit zu kümmern, können Sie der Docker-Datei eine Anweisung hinzufügen:

RUN echo "root:root" | chpasswd

Dies hat nichts mit Docker zu tun. Sie müssen explizit sagen passwd dass Sie das Passwort von angeben werden stdin.

user='root'pass='newpassword'chpasswd <<<"$user:$pass"

Dies funktioniert einwandfrei unter Ubuntu 14.04.4 LTS:

Fügen Sie in dem Skript, das den Container neu erstellt (der auf dem "Host" ausgeführt werden sollte), diese Zeilen hinzu:

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