Chcę ssh lub uderzyć w działający kontener dokerów. Zobacz przykład:
$ sudo docker run -d webserver
webserver is clean image from ubuntu:14.04
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
665b4a1e17b6 webserver:latest /bin/bash ... ... 22/tcp, 80/tcp loving_heisenberg
teraz chcę dostać coś takiego (przejdź do działającego kontenera):
$ sudo docker run -t -i webserver (or maybe 665b4a1e17b6 instead)
$ root@665b4a1e17b6:/#
However when I run the line above I get new CONTAINER ID
$ root@42f1e37bd0e5:/#
Użyłem Vagrant i chciałbym uzyskać podobne zachowanie jak vagrant ssh
.
sudo docker exec -i -t 665b4a1e17b6 /bin/sh
aby móc zainstalować apt programy i pakietysudo docker exec -i -t container-name /bin/bash
jest droga do zrobienia.Odpowiedzi:
Odpowiedzią jest
attach
polecenie Dockera . W powyższym przykładzie rozwiązaniem będzie:W przypadku Dockera w wersji 1.3 lub nowszej: dzięki użytkownikowi WiR3D, który zaproponował inny sposób uzyskania powłoki kontenera. Jeśli użyjemy
attach
, możemy użyć tylko jednego wystąpienia powłoki. Jeśli więc chcemy otworzyć nowy terminal z nową instancją powłoki kontenera, wystarczy uruchomić następujące polecenie:lub
źródło
sudo docker attach loving_heisenberg
-i -t
równa się-it
docker attach
na przykład wejście do instancji MongoDB spowoduje jej usunięcie. Jak wyjaśniono bardziej szczegółowo w tym pytaniuattach
iexec
są to różne zwierzęta.Począwszy od Dockera 1.3:
Zasadniczo, jeśli kontener Docker został uruchomiony przy użyciu
/bin/bash
polecenia, można uzyskać do niego dostęp za pomocąattach
. Jeśli nie, musisz wykonać polecenie, aby utworzyć instancję Bash wewnątrz kontenera za pomocąexec
.Również, aby wyjść z Bash bez pozostawiania Bash w nieuczciwym procesie:
Tak, to takie proste.
źródło
RUN
polecenie w pliku dokera to/bin/bash
. Ale zależy, co masz na myśli. Jeśli chcesz uruchomić kontener i mieć dostęp do basha natychmiast w tym samym terminalu, uruchom to z-it
powinno to zrobićsudo
vsdocker
grupa. Tak czy inaczej, w oknie dokowanym znajduje się luka w zabezpieczeniach, która może zapewnić pełne uprawnienia w systemie plików hosta od gościa - niezależnie od tego, czy używasz grupy dokerów, czysudo
uruchamiasz kontener.Chociaż autor pytania wyraźnie stwierdził, że są zainteresowani działającym kontenerem, warto również zauważyć, że jeśli kontener nie jest uruchomiony, ale chcesz go uruchomić, aby poke wokół, możesz uruchomić:
docker run -i -t --entrypoint /bin/bash <imageID>
źródło
Spróbuj tego:
Źródło: https://docs.docker.com/articles/basics/#running-an-interactive-shell
źródło
root@42f1e37bd0e5:/#
i nieroot@665b4a1e17b6:/#
)Na podstawie odpowiedzi @ Timur stworzyłem następujący przydatny skrypt
Ustawiać
Umieść
docker-ssh
plik w swoim pliku$PATH
o następującej treściUwaga : Niektóre pojemnik nie zawierają
bash
, aleash
,sh
itd. W takich przypadkachbash
powinny zostać zastąpione w powyższym scenariuszu.Stosowanie
Jeśli masz tylko jedną działającą instancję, po prostu uruchom
W przeciwnym razie podaj parametr id dokera, który otrzymujesz
docker ps
(pierwsza kolumna)źródło
Jeśli twój kontener nie ma zainstalowanej bash, możesz spróbować sh:
Lub poszukaj najpierw powłok w / bin:
źródło
Stworzyłem kontenerowy serwer SSH, który zapewnia możliwości SSH do dowolnego działającego kontenera. Nie musisz zmieniać kontenera. Jedynym wymaganiem jest, aby kontener miał bash.
Jeśli masz kontener o nazwie „web-server1”. Następująca komenda uruchamiania dokera uruchomi drugi kontener, który zapewni SSH dla pierwszego kontenera.
Aby uzyskać więcej wskazówek, sprawdź https://github.com/jeroenpeeters/docker-ssh
źródło
@jpetazzo ma niesamowity post na ten temat . Krótka odpowiedź brzmiałaby
nsenter
:PS: Nie zapomnij sprawdzić dyskusji w komentarzach do wpisu ...
Twoje zdrowie
źródło
docker exec
jest raczej wygodniejsze.Możesz również nadać kontenerowi Docker adres IP możliwy do trasowania za pomocą Pipework, a następnie SSH do urządzenia z tym nowym adresem IP.
Będzie to bardziej „tradycyjne” (ssh), zamiast używania polecenia specyficznego dla aplikacji
docker attach
, i ostatecznie sprawi, że będzie ono bardziej „przenośne” między systemami i wersjami.źródło
Czasami przydaje się możliwość ssh do kontenera Docker, szczególnie podczas programowania. Poniższy obraz Dockera umożliwia ssh w kontenerze przy użyciu klucza prywatnego:
UbuntuWithSSH-Docker
Istotą pliku Dockerfile jest https://gist.github.com/devbkhadka/98792f7bca57f9778793b2db758b3d07 .
źródło
To działa :-)
źródło
GOINSIDE
zainstaluj
goinside
narzędzie wiersza poleceń za pomocą:i wejdź do kontenera dokującego o odpowiedniej wielkości terminala z:
po więcej szczegółów sprawdź to .
źródło
Aby uderzyć w działający kontener, wpisz:
źródło
Tylko dla informacji. Jeśli chcesz się zalogować w prostym kontenerze, który nie jest demonem, musisz użyć następujących poleceń:
źródło
jeśli kontener zostanie zatrzymany, jak na przykład kontener tylko danych, dobrym rozwiązaniem jest uruchomienie kontenera wysuwanego za każdym razem, gdy chcesz dołączyć do kontenera danych. W takim przypadku sam kontener danych może być całkowicie pusty, ponieważ tymczasowy kontener miałby narzędzia systemu operacyjnego.
źródło