web-dev-qa-db-fra.com

Comment puis-je définir le mot de passe root dans un conteneur Docker à partir d'un script?

J'ai un script qui s'exécute sur l'hôte et crée/démarre/arrête un conteneur Docker. J'aimerais que le script change le mot de passe de l'utilisateur root dans le conteneur.

Puisque le conteneur est un serveur ssh, j'ai essayé: sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root'

mais ça ne marche pas. Avant d'aller plus loin et de passer plus de temps à le déboguer, j'aimerais savoir s'il existe une façon plus intelligente de le faire.

Je comprends que la bonne "manière de docker" consiste à créer un script exécuté par le Dockerfile, qui extrait le mot de passe d'un volume partagé et le définit comme mot de passe root. Cela semble compliqué, mais je sais comment le faire et fonctionne bien pour une autre image de docker que j'utilise. Mais je ne veux pas le faire pour celui-ci.

J'ai juste besoin d'une commande qui utilise Docker ou ssh pour modifier le mot de passe d'un utilisateur de manière non interactive.

11
Chris

Cela fonctionne parfaitement sur Ubuntu 14.04.4 LTS:

Dans le script qui reconstruit le conteneur (qui devrait être exécuté sur "l'hôte"), ajoutez ces lignes:

$PASS='<a-good-password>'
echo -e "$PASS\n$PASS" | Sudo docker exec -i <container-id-or-name> passwd
1
Chris
PASSWORD=$(zenity --password --title="Docker" 2>/dev/null)

ouvrira une fenêtre contextuelle, demandant un mot de passe, et le retournera. Aucun mot de passe stocké dans le script

Si vous avez un conteneur Docker où vous devez définir un mot de passe, sans trop vous soucier de la sécurité, vous pouvez ajouter une instruction dans le Dockerfile:

RUN echo "root:root" | chpasswd
8
Ulf Samuelsson

Ce n'est pas lié à Docker. Vous devez explicitement dire passwd que vous allez fournir un mot de passe à partir de stdin.

echo 'newpassword' |passwd root --stdin
5
user1700494