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?
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
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.
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
docker exec -u 0 -it containername bash
Je suis capable de le faire fonctionner avec la commande ci-dessous.
root@gitnew:# docker exec -it --user $(username) $(containername) /bin/bash
Il y a deux façons de le faire.
Pour exécuter le menu fixe en remplaçant le paramètre USER
docker exec -u 0 -it containerName bash
Attribuez les autorisations de fichier nécessaires, etc., pendant la création de l'image dans le fichier Docker
Si tous les packages sont disponibles dans votre image Linux, chpasswd
dans le fichier docker avant l'utilitaire USER.
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:
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.
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.
essayez la commande suivante pour obtenir l'accès root
$ Sudo -i
Vous pouvez utiliser la commande USER root dans votre fichier Docker.
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.