web-dev-qa-db-fra.com

Mot de passe root dans un conteneur Docker

J'utilise une image Docker construite à l'aide de la commande USER pour utiliser un utilisateur non root appelé dev. Dans un conteneur, je suis "dev", mais je souhaite modifier le fichier /etc/hosts.

J'ai donc besoin d'être root. J'essaie la commande su, mais on me demande d'entrer le mot de passe root.

Quel est le mot de passe de l'utilisateur root par défaut dans un conteneur Docker?

164
guillaume

Finalement, j'ai décidé de reconstruire mes images Docker, afin de changer le mot de passe root par quelque chose que je saurai.

RUN echo "root:Docker!" | chpasswd

ou

RUN echo "Docker!" | passwd --stdin root 
57
guillaume

Vous pouvez vous connecter au conteneur Docker en utilisant l'utilisateur root (ID = 0) au lieu de l'utilisateur par défaut fourni lorsque vous utilisez l'option -u. Par exemple.

docker exec -u 0 -it mycontainer bash

root (id = 0) est l'utilisateur par défaut dans un conteneur. L'image développeur peut créer des utilisateurs supplémentaires. Ces utilisateurs sont accessibles par prénom. Lors de la transmission d'un identifiant numérique, il n'est pas nécessaire que l'utilisateur existe dans le conteneur.

de la documentation Docker

311
H6.

J'ai eu exactement ce problème de ne pas être en mesure de root sur root car je courais dans le conteneur en tant qu'utilisateur non privilégié.

Mais je ne voulais pas reconstruire une nouvelle image comme le suggéraient les réponses précédentes.

Au lieu de cela, j'ai découvert que je pouvais accéder au conteneur en tant que root à l'aide de 'nsenter', voir: https://github.com/jpetazzo/nsenter

Déterminez d'abord le PID de votre conteneur sur l'hôte:

docker inspect --format {{.State.Pid}} <container_name_or_ID>

Puis utilisez nsenter pour entrer le conteneur en tant que root

nsenter --target <PID> --mount --uts --ipc --net --pid
14
Richard Corfield
docker exec -u 0 -it containername bash
13
user128364

Je suis capable de le faire fonctionner avec la commande ci-dessous.

root@gitnew:# docker exec -it --user $(username) $(containername) /bin/bash
12
Mansur Ali

Il y a deux façons de le faire.

  1. Pour exécuter le menu fixe en remplaçant le paramètre USER

    docker exec -u 0 -it containerName bash
    
  2. Attribuez les autorisations de fichier nécessaires, etc., pendant la création de l'image dans le fichier Docker

  3. Si tous les packages sont disponibles dans votre image Linux, chpasswddans le fichier docker avant l'utilitaire USER.

8
Muralidharan.rade

Obtenez un shell de votre conteneur en cours d'exécution et changez le mot de passe root:

docker exec -it <MyContainer> bash

root@MyContainer:/# passwd
Enter new UNIX password:
Retype new UNIX password:
4
DimiDak

Je suggérerais une meilleure solution consiste à donner l'argument --add-Host NAME:IP à l'exécution du menu fixe lors du démarrage du conteneur. Cela mettra à jour le fichier /etc/hosts/ sans qu'il soit nécessaire de devenir root.

Sinon, vous pouvez remplacer le paramètre USER en attribuant l'indicateur -u USER à docker run. Je vous déconseille cependant, car vous ne devriez pas vraiment changer les choses dans un conteneur en cours d'exécution. Effectuez plutôt vos modifications dans un fichier Docker et créez une nouvelle image.

2
Adrian Mouat

Le mot de passe est 'ubuntu' pour l'utilisateur 'ubuntu' (au moins dans docker pour ubuntu: 14.04.03).

NB: 'ubuntu' est créé après le démarrage du conteneur, donc, si vous faites juste ceci:

 docker run -i -t --entrypoint /bin/bash  ubuntu     

Vous obtiendrez directement l'invite de la racine. À partir de là, vous pouvez forcer le changement de mot de passe de root, valider le conteneur et éventuellement le baliser (avec -f) sur ubuntu: 

root@ec384466fbbb:~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@ec384466fbbb:~# exit

% docker commit ec3844
5d3c03e7d6d861ce519fe33b184cd477b8ad03247ffe19b2a57d3f0992d71bca

docker tag -f 5d3c ubuntu:latest

Vous devez reconstruire vos éventuelles dépendances sur Ubuntu: latest.

2
user1853859

essayez la commande suivante pour obtenir l'accès root 

$ Sudo -i 
2
Abhishek D K

Vous pouvez utiliser la commande USER root dans votre fichier Docker.

1
naveen kumar

Lorsque vous démarrez le conteneur, vous serez root mais vous ne saurez pas ce qu'est pw. Pour le définir sur quelque chose que vous connaissez, utilisez simplement "passwd root". Snapshot/commit le conteneur pour enregistrer vos actions.

0
JohnBabrick