it-swarm.com.de

Root-Passwort in einem Docker-Container

Ich verwende ein Docker-Image, das mit dem USER-Befehl erstellt wurde, um einen Nicht-Root-Benutzer namens dev..__ zu verwenden. In einem Container bin ich "dev", aber ich möchte die /etc/hosts-Datei bearbeiten.

Also muss ich root sein. Ich versuche den Befehl su, aber ich werde aufgefordert, das Root-Passwort einzugeben.

Wie lautet das Standardkennwort des Root-Benutzers in einem Docker-Container?

164
guillaume

Schließlich entschied ich mich, meine Docker-Images neu zu erstellen, sodass ich das Root-Passwort um etwas ändere, das ich kennen werde.

RUN echo "root:Docker!" | chpasswd

oder

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

Sie können sich beim Docker-Container mit dem Root-Benutzer (ID = 0) anstelle des angegebenen Standardbenutzers anmelden, wenn Sie die Option -u verwenden. Z.B.

docker exec -u 0 -it mycontainer bash

root (id = 0) ist der Standardbenutzer in einem Container. Das Bild Entwickler können zusätzliche Benutzer erstellen. Diese Benutzer sind über .__ erreichbar. Name. Bei der Übergabe einer numerischen ID muss der Benutzer nicht in .__ vorhanden sein. der Kontainer.

aus der Docker-Dokumentation

311
H6.

Ich hatte genau dieses Problem, nicht in der Lage zu sein, root zu verwenden, da ich als unprivilegierter Benutzer im Container lief.

Aber ich wollte kein neues Image erstellen, wie die vorangegangenen Antworten nahelegen.

Stattdessen habe ich festgestellt, dass ich als 'root' mit 'nsenter' auf den Container zugreifen kann. Siehe: https://github.com/jpetazzo/nsenter

Bestimmen Sie zuerst die PID Ihres Containers auf dem Host:

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

Dann geben Sie den Container mit nsenter als root ein

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

Ich kann es mit dem folgenden Befehl zum Laufen bringen.

[email protected]:# docker exec -it --user $(username) $(containername) /bin/bash
12
Mansur Ali

Es gibt mehrere Möglichkeiten, dies zu tun.

  1. Den Docker ausführen, um die USER-Einstellung zu überschreiben

    docker exec -u 0 -it containerName bash
    
  2. Stellen Sie die erforderlichen Dateiberechtigungen usw. während der Image-Erstellung in der Docker-Datei ein

  3. Wenn alle Pakete in Ihrem Linux-Image verfügbar sind, chpasswdin der Docker-Datei vor dem USER-Dienstprogramm.

8

Holen Sie sich eine Shell Ihres laufenden Containers und ändern Sie das root-Passwort:

docker exec -it <MyContainer> bash

[email protected]:/# passwd
Enter new UNIX password:
Retype new UNIX password:
4
DimiDak

Ich würde vorschlagen, dass eine bessere Lösung darin besteht, das --add-Host NAME:IP-Argument beim Starten des Containers andocken zu lassen. Dadurch wird die /etc/hosts/-Datei aktualisiert, ohne dass Sie root werden müssen.

Andernfalls können Sie die Einstellung USER überschreiben, indem Sie das -u USER-Flag an docker run übergeben. Ich würde jedoch davon abraten, da Sie eigentlich keine Änderungen an einem laufenden Container vornehmen sollten. Nehmen Sie stattdessen Ihre Änderungen in einer Docker-Datei vor und erstellen Sie ein neues Image.

2
Adrian Mouat

Das Kennwort lautet "ubuntu" für den Benutzer "ubuntu" (zumindest im Docker für ubuntu: 14.04.03).

Hinweis: 'ubuntu' wird nach dem Start des Containers erstellt. Wenn Sie also Folgendes tun:

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

Sie erhalten die root-Eingabeaufforderung direkt. Von dort aus können Sie die Passwortänderung von root erzwingen, den Container festschreiben und optional (mit -f) für ubuntu: latest so kennzeichnen: 

[email protected]:~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
[email protected]:~# exit

% docker commit ec3844
5d3c03e7d6d861ce519fe33b184cd477b8ad03247ffe19b2a57d3f0992d71bca

docker tag -f 5d3c ubuntu:latest

Sie müssen Ihre eventuellen Abhängigkeiten von Ubuntu: spätestens neu erstellen.

2
user1853859

versuchen Sie den folgenden Befehl, um den Root-Zugriff zu erhalten 

$ Sudo -i 
2
Abhishek D K

Sie können den USER-Root-Befehl in Ihrer Docker-Datei verwenden.

1
naveen kumar

Wenn Sie den Container starten, sind Sie root, aber Sie wissen nicht, was der Root von root ist. Um es auf etwas einzustellen, das Sie kennen, benutzen Sie einfach "passwd root". Schnappschuss/Commit des Containers zum Speichern Ihrer Aktionen.

0
JohnBabrick