Hasło roota w kontenerze Docker


265

Używam obrazu Docker, który został zbudowany za pomocą polecenia USER, aby użyć użytkownika innego niż root o nazwie dev. Wewnątrz kontenera jestem „dev”, ale chcę edytować /etc/hostsplik.

Więc muszę być rootem. Próbuję polecenia su, ale jestem proszony o podanie hasła roota.

Jakie jest domyślne hasło użytkownika root w kontenerze Docker?


11
tylko exec jako root: docker exec -u 0 -it mycontainer bash. (patrz H6odpowiedź)
— Sławomir Lenart

Odpowiedzi:


494

Możesz zalogować się do kontenera Docker przy użyciu użytkownika root (ID = 0) zamiast podanego domyślnego użytkownika, gdy korzystasz z tej -uopcji. Na przykład

docker exec -u 0 -it mycontainer bash

root (id = 0) jest domyślnym użytkownikiem w kontenerze. Twórca obrazu może tworzyć dodatkowych użytkowników. Ci użytkownicy są dostępni według nazwy. Podczas przekazywania identyfikatora numerycznego użytkownik nie musi istnieć w kontenerze.

z dokumentacji Docker


5
Byłoby miło określić, że potrzebujesz mojego kontenera w momencie, gdy wpiszesz powyższe polecenie. działa przy użyciu 2 różnych terminali: jeden dla mycontainer i drugi dla tego polecenia. W przeciwnym razie mój kontener musi działać jako odłączony.
— nicolimo86,

6
do zdjęć użyjdocker run -u 0 -it mycontainer bash
— Pavel 'PK' Kaminsky

2
to odpowiedź powinna być na górze
— D Pinto

1
@ High6, kiedy mówisz „Możesz zalogować się do Docker Image ...”, myślę, że masz na myśli „Możesz zalogować się do Docker Container ”.
— lmiguelvargasf

Czy to zawsze jest możliwe? Czy może to zostać zablokowane?
— Sam Thomas

82

W końcu postanowiłem odbudować moje obrazy Dockera, aby zmienić hasło roota na coś, co będę wiedział.

RUN echo 'root:Docker!' | chpasswd

lub

RUN echo 'Docker!' | passwd --stdin root 

5
Próbowałem tego, ale to nie działa na moim dokerze opartym na CentOS 6. Czy to polecenie działa w oknie dokowanym opartym na CentOS?
— Dragan Nikolic

28

Można to zrobić na kilka sposobów.

  1. Aby uruchomić Docker zastępujący ustawienie USER

    docker exec -u 0 -it containerName bash
    

lub

docker exec -u root -it --workdir / <containerName> bash
  1. Dokonaj niezbędnych uprawnień do plików itp. Podczas kompilacji obrazu w pliku Docker

  2. Jeśli wszystkie pakiety są dostępne w obrazie Linuksa, chpasswdw pliku dokera przed narzędziem USER.



23

Jestem w stanie sprawić, że będzie działać z poniższym poleceniem.

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

18

Miałem dokładnie ten problem, że nie mogłem su do rootowania, ponieważ działałem w kontenerze jako nieuprzywilejowany użytkownik.

Ale nie chciałem odbudowywać nowego obrazu, jak sugerują poprzednie odpowiedzi.

Zamiast tego odkryłem, że mogę uzyskać dostęp do kontenera jako root za pomocą „nsenter”, patrz: https://github.com/jpetazzo/nsenter

Najpierw określ PID swojego kontenera na hoście:

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

Następnie użyj nsenter, aby wprowadzić kontener jako root

nsenter --target <PID> --mount --uts --ipc --net --pid

1
Korzystając z boot2docker, musiałem użyćsudo nsenter --target <PID> --mount --uts --ipc --net --pid
— peater

Tak, dobra uwaga. Zasadniczo potrzebujesz uprawnień roota do wykonywania poleceń dokera i myślę, że nsenter jest taki sam. W mojej odpowiedzi nie wyjaśniłem tego całkowicie.
— Richard Corfield,

4
Od czasu napisania tej odpowiedzi doker dodał komendę exec, aby zrobić to samo co nsenter, ale łatwiej i czystiej. Tylko punkt danych dla tych, którzy teraz znajdą to pytanie poprzez wyszukiwanie. Polecenie to „docker exec -it <nazwa_kontenera> <polecenie>” (zwykle jest to / bin / bash, ale oczywiście możesz zrobić, co chcesz).
— Kevin Keane

Ponadto doker ma specjalne traktowanie hostów (i resolv.conf). Nie powinieneś ich ręcznie edytować; docker odtwarza / etc / hosts na każdym początku, aby odzwierciedlić połączone kontenery i tym podobne.
— Kevin Keane


9

Uzyskaj powłokę działającego kontenera i zmień hasło roota:

docker exec -it <MyContainer> bash

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

9

Aby utworzyć / zmienić hasło roota w działającym kontenerze

docker exec -itu root {containerName} passwd

5

Hasło to „ubuntu” dla użytkownika „ubuntu” (przynajmniej w oknie dokowanym dla ubuntu: 14.04.03).

Uwaga: „Ubuntu” jest tworzone po uruchomieniu kontenera, więc jeśli tylko to zrobisz:

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

Otrzymasz monit o rootowanie bezpośrednio. Stamtąd możesz wymusić zmianę hasła roota, zatwierdzić kontener i opcjonalnie oznaczyć go (-f) na Ubuntu: najnowsze jak to:

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

Musisz odbudować swoje ewentualne zależności od Ubuntu: najnowszy.


3

Sugeruję, że lepszym rozwiązaniem jest podanie --add-host NAME:IPargumentu do uruchomienia dokera podczas uruchamiania kontenera. To zaktualizuje/etc/hosts/ plik bez potrzeby rootowania.

W przeciwnym razie możesz zmienić USERustawienie, podając -u USERflagę do docker run. Odradzałbym to jednak, ponieważ tak naprawdę nie powinieneś zmieniać rzeczy w działającym kontenerze. Zamiast tego wprowadź zmiany w Dockerfile i utwórz nowy obraz.


Muszę dodać wpisy do pliku hosts, gdy kontener jest uruchomiony.
— guillaume,

Muszę także zainstalować nowy pakiet, ale nie mogę, ponieważ nie jestem rootem.
— guillaume,

1
Możesz użyć -uflagi, aby zmienić użytkownika. Nie sądzę, że możesz to zrobić z wnętrza pojemnika.
— Adrian Mouat


2

Po uruchomieniu kontenera będziesz rootem, ale nie będziesz wiedział, co to jest pw roota. Aby ustawić to na coś, co znasz, po prostu użyj „passwd root”. Zrób migawkę / zatwierdź kontener, aby zapisać swoje działania.


1

Domyślnie kontenery dokowane działają jako rootużytkownik.

Jeśli nadal używasz kontenera, możesz użyć exitpolecenia, aby wrócić doroot użytkownika (domyślnego użytkownika) zamiast ponownie uruchamiać kontener.

Przykład -

[dev@6c4c86bccf93 ~]$ ls
[dev@6c4c86bccf93 ~]$ other-commands..
[dev@6c4c86bccf93 ~]$ exit
[root@6c4c86bccf93 /]# ls

0

spróbuj wykonać następujące polecenie, aby uzyskać dostęp do konta root

$ sudo -i 

Jest to mało prawdopodobne, chyba że masz konto w konfiguracji kontenera z dostępem sudo. To byłaby niezwykła sytuacja i złamanie punktu, w którym użytkownik inny niż root uruchamia kontener.
— Josiah

Czy ktoś zna DOMYŚLNE hasło do instalacji Docker? Próbowałem uruchomić elewację i tam jest jeden zestaw.
— Patrick Burwell

Działa to w WSL2 po wyeksportowaniu obrazu dokera i zaimportowaniu do WSL2. Stamtąd zrób passwd, aby ustawić hasło dla roota. Wróć do użytkownika innego niż root i wypróbuj sudo su lub su. Teraz będzie działać.
— WSLUser

0

W niektórych przypadkach musisz mieć możliwość robienia takich rzeczy pod użytkownikiem za pomocą sudo(np. Aplikacja działająca w kontenerze zapewnia użytkownikom powłokę). Po prostu dodaj to do swojego Dockerfile:

RUN apt-get update         # If necessary
RUN apt-get install sudo   # If your base image does not contain sudo.
RUN useradd -m -N -s /bin/bash -u 1000 -p '$1$miTOHCYy$K.c4Yw.edukWJ7z9rbpTZ0' user && \
    usermod -aG sudo user  # Grant sudo to the user
USER user

Teraz pod domyślnym użytkownikiem obrazu userbędziesz mógł, sudoużywając hasła ustawionego w linii 3.

Zobacz, jak wygenerować skrót hasłem useradd tutaj lub tutaj .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.