Android

Jak połączyć się z kontenerem dokowanym

Toruń JUG #41 - "Kontenery są do bani..." - Sebastian Łaskawiec

Toruń JUG #41 - "Kontenery są do bani..." - Sebastian Łaskawiec

Spisu treści:

Anonim

Łączenie z działającym kontenerem Docker jest pomocne, gdy chcesz zobaczyć, co dzieje się wewnątrz kontenera. Jeśli kontener Docker nie działa zgodnie z oczekiwaniami, możesz dołączyć do kontenera lub uzyskać powłokę do kontenera i uruchomić polecenia takie jak ps lub top . Możesz także wejść do kontenera, zainstalować nowe pakiety i zbudować z niego nowy obraz Dockera.

W tym samouczku wyjaśnimy, jak dołączyć do głównego uruchomionego procesu kontenera i jak uzyskać powłokę do działającego kontenera.

Dołącz do kontenera

Chociaż możliwe jest uruchomienie wielu procesów w kontenerze, większość kontenerów dokerów uruchamia tylko jeden proces. Polecenie, które jest wykonywane podczas uruchamiania kontenera, jest określone za pomocą instrukcji ENTRYPOINT i / lub RUN .

Polecenie docker attach umożliwia podłączenie terminala do działającego kontenera. Jest to przydatne, gdy chcesz zobaczyć, co jest zapisane na standardowym wyjściu w czasie rzeczywistym lub kontrolować proces interaktywnie.

Aby lepiej zrozumieć działanie polecenia attach uruchommy nowy odłączony pojemnik Nginx, używając oficjalnego obrazu Nginx.

docker container run --name my_nginx -d -p 8080:80 nginx

Opcja -p 8080:80 mówi Dockerowi, aby powiązał port 8080 kontenera z portem 80 na hoście.

Wymień kontenery, aby upewnić się, że kontener „my_nginx” jest uruchomiony:

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e1c4974a8d8 nginx "nginx -g 'daemon of…" 3 minutes ago Up 2 seconds 0.0.0.0:8080->80/tcp my_nginx

Dołącz do kontenera, używając identyfikatora lub nazwy kontenera:

docker container attach my_nginx

Domyślne polecenie obrazu nginx, które jest wykonywane po uruchomieniu kontenera, jest ustawione na CMD . Po uruchomieniu polecenia attach terminal dołącza się do procesu nginx .

Otwórz 127.0.0.1:8080 w przeglądarce i możesz oglądać wyniki procesu nginx w czasie rzeczywistym.

192.168.33.1 - - "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-" 192.168.33.1 - - "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.33.71:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"

Aby uzyskać dostęp do dzienników kontenera, powinieneś preferować użycie komendy docker logs .

Aby odłączyć się od pojemnika bez zatrzymywania go, użyj CTRL-p CTRL-q . Naciśnięcie CTRL-c zatrzymuje pojemnik.

Jeśli uruchomione procesy, do których dołączasz, akceptują dane wejściowe, możesz wysyłać do nich instrukcje.

Dostań pocisk do kontenera

Polecenie docker exec pozwala na uruchamianie poleceń w działającym kontenerze.

Aby zobaczyć, jak działa polecenie exec i jak można go użyć do wejścia do powłoki kontenera, najpierw uruchom nowy kontener. Użyjemy oficjalnego obrazu MySQL:

docker container run --name my_mysql -d mysql

Spowoduje to utworzenie kontenera o nazwie „my_mysql”.

Aby wykonać polecenie w kontenerze, uruchom następujące polecenie:

docker container exec -it my_mysql ls /var

Opcja -i oznacza Interactive, i -t mówi Dockerowi, aby przydzielił pseudo urządzenie TTY. Polecenie ls wyświetli wszystkie pliki i katalogi w katalogu /var kontenera:

backups cache lib local lock log mail opt run spool tmp

Aby dostać powłokę do kontenera, tj. Aby wejść do kontenera, rozpocznij nową sesję powłoki, wykonując plik binarny powłoki. Możesz użyć sh , bash lub dowolnej innej powłoki zawartej w obrazie.

Poniższe polecenie utworzy nową sesję Bash wewnątrz kontenera:

docker container exec -it my_mysql /bin/bash

Twój wiersz polecenia zmieni się, wskazując, że pracujesz teraz nad powłoką kontenera.

Stąd możesz uruchamiać polecenia w taki sam sposób, jak na dowolnym innym serwerze Linux. Na przykład, aby uzyskać listę bieżących zmiennych środowiskowych wpisz env :

env

Dane wyjściowe będą wyglądać mniej więcej tak:

HOSTNAME=e0214d97e0fe MYSQL_ROOT_PASSWORD=my-secret-pw PWD=/ HOME=/root MYSQL_MAJOR=8.0 GOSU_VERSION=1.7 MYSQL_VERSION=8.0.17-1debian9 TERM=xterm SHLVL=1 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin _=/usr/bin/env

Wniosek

Polecenia docker exec i docker attach pozwalają ci połączyć się z działającym kontenerem. Aby uzyskać interaktywną powłokę do kontenera, użyj polecenia exec aby rozpocząć nową sesję powłoki. Polecenie dołącza dołącza terminal do działającego kontenera.

doker