Zaczynam pracę z Dockerem. Korzystam z obrazu podstawowego WordPress i komponuję okno dokowane.
Próbuję ssh do jednego z kontenerów, aby sprawdzić pliki / katalogi, które zostały utworzone podczas początkowej kompilacji. Próbowałem biec docker-compose run containername ls -la
, ale to nic nie zrobiło. Nawet gdyby tak było, wolałbym mieć konsolę, w której mógłbym przeglądać strukturę katalogów, zamiast uruchamiać pojedyncze polecenie. Jak to zrobić w Docker?
docker
docker-container
Andrzej
źródło
źródło
docker exec
askubuntu.com/a/543057/35816 . Pobierz identyfikator kontenera za pomocądocker ps
sudo docker run -it --entrypoint /bin/bash <container_name>
przenosi Cię do kontenera interaktywnie. Następnie można sprawdzić system plików w kontenerze, używająccd <path>
Odpowiedzi:
docker attach
pozwoli ci połączyć się z kontenerem Docker, ale tak naprawdę to nie to samo, cossh
. Jeśli pojemnik ma serwera WWW, na przykład,docker attach
będzie prawdopodobnie połączyć Cię do stdout procesu serwera WWW. To niekoniecznie da ci powłokę.docker exec
Polecenia jest chyba to, czego szukasz; pozwoli ci to uruchomić dowolne polecenia w istniejącym kontenerze. Na przykład:Oczywiście każde uruchomione polecenie musi istnieć w systemie plików kontenera.
W powyższym poleceniu
<mycontainer>
jest nazwa lub identyfikator kontenera docelowego. Nie ma znaczenia, czy używaszdocker compose
; po prostu uruchomdocker ps
i użyj albo ID (ciąg szesnastkowy wyświetlany w pierwszej kolumnie), albo nazwę (wyświetlany w ostatniej kolumnie). Na przykład biorąc pod uwagę:Mogę biec:
Mogłem osiągnąć to samo, uruchamiając:
Podobnie mógłbym uruchomić powłokę w pojemniku;
źródło
docker exec
Działa również tylko na uruchomionych kontenerach (w przeciwnym razie użyjdocker run -it --entrypoint /bin/bash
lub podobnych).-it
jest to kombinacja-i
i-t
która jest odpowiednio--interactive
(„Zachowaj STDIN otwarty, nawet jeśli nie jest dołączony”) odpowiednio--tty
(„Przydziel pseudo-TTY”).docker run -it --entrypoint /bin/bash <imageid> --any --more --args
, aby wyjaśnić ludziom--any --more --args
masz, będą karmieni czymkolwiek, co obraz zdefiniował jako swój,CMD
a nie Docker (lub jeśli twój obraz definiuje tylkoENTRYPOINT
i nieCMD
, wtedy te opcje zostaną uwzględnione,/bin/bash
jak określono tutaj ). Na przykład wszelkie innedocker run
opcje (np.--net "host"
) Muszą przejść przed<imageid>
.Aby uderzyć w działający kontener, wpisz:
lub
lub
źródło
docker exec -it
zamiastdocker exec -t -i
Powiedzmy, że z własnych powodów naprawdę chcesz korzystać z SSH. To zajmuje kilka kroków, ale można to zrobić. Oto polecenia, które można uruchomić w kontenerze, aby go skonfigurować ...
Teraz możesz nawet uruchamiać aplikacje graficzne (jeśli są zainstalowane w kontenerze), używając X11 do klienta SSH:
Oto niektóre powiązane zasoby:
źródło
Jeśli szukasz tutaj odpowiedzi specyficznej dla Docker Compose, takiej jak ja, zapewnia to łatwą drogę bez konieczności wyszukiwania wygenerowanego identyfikatora kontenera.
docker-compose exec
przyjmuje nazwę usługi zgodnie zdocker-compose.yml
plikiem.Aby uzyskać powłokę Bash dla usługi „sieciowej”, możesz:
źródło
docker-compose run
działa również, jeśli twój kontener jeszcze nie istnieje.Uwaga : ta odpowiedź promuje narzędzie, które napisałem.
Stworzyłem kontenerowy serwer SSH, który można „przykleić” do dowolnego działającego kontenera. W ten sposób możesz tworzyć kompozycje z każdego pojemnika. Jedynym wymaganiem jest to, że kontener ma Bash.
Poniższy przykład uruchomiłby serwer SSH podłączony do kontenera o nazwie „mój-kontener”.
Gdy połączysz się z tą usługą SSH (z wybranym klientem SSH), sesja Bash zostanie uruchomiona w kontenerze o nazwie „mój-kontener”.
Więcej wskazówek i dokumentacji można znaleźć na stronie : https://github.com/jeroenpeeters/docker-ssh
źródło
less
wyświetlałem ostrzeżenie za każdym razem, gdy go uruchamiam itp. Korzystanie z kontenera Jeroen daje mi o wiele lepsze wrażenia. Po prostu sprawdź dokumentację . Przykładowe polecenie w odpowiedzi nie wydaje się już prawidłowe.Jeśli używasz Dockera w systemie Windows i chcesz uzyskać dostęp powłoki do kontenera, użyj tego:
Najprawdopodobniej masz już zainstalowany Git Bash . Jeśli nie, zainstaluj go.
źródło
Jeśli kontener już wyszedł (być może z powodu błędu), możesz to zrobić
lub
lub
aby utworzyć nowy pojemnik i uzyskać do niego powłokę. Ponieważ podałeś --rm, kontener zostanie usunięty po wyjściu z powłoki.
źródło
W niektórych przypadkach twój obraz może być oparty na alpejskim. W takim przypadku wyrzuci:
Ponieważ
/bin/bash
nie istnieje. Zamiast tego powinieneś użyć:lub
źródło
SSH do kontenera Docker za pomocą tego polecenia:
źródło
Aby połączyć się z cmd w kontenerze Windows, użyj
Gdzie d8c25fde2769 jest identyfikatorem kontenera.
źródło
To jest proste !
Wymień wszystkie obrazy Dockera:
W moim systemie pokazało następujące dane wyjściowe:
Mam dwa obrazy Docker na moim komputerze. Powiedzmy, że chcę uruchomić pierwszy.
To da ci terminalową kontrolę nad kontenerem. Teraz możesz wykonywać wszelkiego rodzaju operacje powłoki w kontenerze. Podobnie jak robienie
ls
, wypisane zostaną wszystkie foldery w katalogu głównym systemu plików.źródło
Aby sprawdzić pliki, uruchom,
docker run -it <image> /bin/sh
aby uzyskać interaktywny terminal. Listę zdjęć można uzyskać za pomocądocker images
. W przeciwieństwie dodocker exec
tego rozwiązania działa również w przypadku, gdy obraz nie uruchamia się (lub kończy pracę natychmiast po uruchomieniu).źródło
ROZWIĄZANIE GOINSIDE
zainstaluj
goinside
narzędzie wiersza poleceń za pomocą:i wejdź do kontenera dokującego o odpowiedniej wielkości terminala z:
stara odpowiedź
Umieściliśmy ten fragment kodu w
~/.profile
:Nie tylko sprawia to, że każdy może dostać się do działającego kontenera dzięki:
Rozwiązuje również długotrwały problem związany ze stałymi rozmiarami terminali kontenerowych Docker . Co jest bardzo denerwujące, jeśli się z tym zmierzysz.
Również po kliknięciu tego łącza będziesz mieć możliwość wykonania poleceń dotyczących nazw kontenerów dokerów.
źródło
Lub może być w zależności od powłoki
Możesz uzyskać identyfikator kontenera za pomocą
docker ps
polecenia-i
= interaktywny-t
= przydzielić psuedo-TTYźródło
Stworzyłem funkcję terminala dla łatwiejszego dostępu do terminala kontenera. Może wam też się przyda:
Rezultatem jest, zamiast pisać:
napiszesz:
Umieść następujące informacje w swoim ~ / .bash_profile (lub cokolwiek innego, co Ci odpowiada), a następnie otwórz nowe okno terminala i skorzystaj ze skrótu:
źródło
możesz wchodzić w interakcje z terminalem w kontenerze dokowanym, przekazując opcję -ti
-t oznacza terminal -i oznacza interaktywny
źródło
docker exec
na pewno będzie rozwiązaniem. Łatwym sposobem pracy z zadanym pytaniem jest zamontowanie katalogu wewnątrz Dockera do katalogu systemu lokalnego .Abyś mógł natychmiast zobaczyć zmiany w lokalnej ścieżce.
źródło
Posługiwać się:
Innym sposobem, aczkolwiek istnieje niebezpieczeństwo, jest użycie
attach
, ale jeśli Ctrl+ wyjdziesz Cz sesji, zatrzymasz również kontener. Jeśli chcesz tylko zobaczyć, co się dzieje, użyjdocker logs -f
.źródło
Użyj tego polecenia:
źródło
Jeśli masz zainstalowany Docker
Kitematic
, możesz użyć GUI. OtwórzKitematic
ikonę DockerKitematic
, a następnie w oknie wybierz kontener, a następnie kliknijexec
ikonę.Możesz zobaczyć dziennik kontenera i wiele informacji o kontenerze (w zakładce ustawień) również w tym GUI.
źródło
W moim przypadku z jakiegoś powodu muszę sprawdzić wszystkie informacje dotyczące sieci w każdym kontenerze. Dlatego poniższe polecenia muszą być prawidłowe w kontenerze ...
Przejrzałem wszystkie te odpowiedzi, żadne nie były dla mnie pomocne. Przeszukałem informacje na innych stronach internetowych. Nie dodam tutaj super linku, ponieważ nie jest napisany po angielsku. Właśnie opublikowałem ten post z rozwiązaniem podsumowującym dla osób, które mają takie same wymagania jak ja.
Załóżmy, że masz jeden działający kontener o nazwie test świetlny. Wykonaj poniższe kroki.
docker inspect light-test -f {{.NetworkSettings.SandboxKey}}
. To polecenie otrzyma odpowiedź jak/var/run/docker/netns/xxxx
.ln -s /var/run/docker/netns/xxxx /var/run/netns/xxxx
. Katalog może nie istnieć, zrób tomkdir /var/run/netns
najpierw.ip netns exec xxxx ip addr show
eksplorację świata sieci w kontenerze.PS.
xxxx
jest zawsze tą samą wartością otrzymaną od pierwszego polecenia. I oczywiście wszelkie inne polecenia są prawidłowe, tjip netns exec xxxx netstat -antp|grep 8080
.źródło
Inną opcją jest użycie nsenter .
źródło
nsenter
. Po pierwsze, wymaga fizycznego dostępu do hosta dokera, co nie jest dane (być może pracujesz ze zdalnym interfejsem API dokera). Ponadto działanie podnsenter
zwolnia cię z szeregu ograniczeń bezpieczeństwa i zasobów, które Docker nakłada (które mogą być wady lub zalety, w zależności od środowiska).docker exec
tych dni.docker exec
.docker exec
wygląda mi bardziej elegancko.Jeśli używasz Docker Compose, przeniesie Cię to do kontenera Docker.
Wewnątrz kontenera zabierze Cię do WORKDIR zdefiniowanego w Dockerfile. Możesz zmienić katalog roboczy za pomocą
źródło
Aby wykonać w działającym kontenerze o nazwie
test
, poniżej znajdują się następujące poleceniaJeśli pojemnik ma
bash
powłokęJeśli pojemnik ma
bourne
powłokę i większość skrzynek jest obecnaźródło
Do tworzenia dokerów-skomponuj (Docker4Drupal)
Korzystam z Dockera dla Drupala na laptopie z systemem Linux. Po uruchomieniu kontenera używam '
docker-compose exec php bash
', aby połączyć się z kontenerem, aby móc uruchomić komandosy drush. Działa dla mnie dobrze.źródło