Szukaj…


Składnia

  • statystyki dokera [OPCJE] [POJEMNIK ...]
  • dzienniki dokerów [OPCJE] POJEMNIK
  • docker top [OPCJE] CONTAINER [ps OPCJE]

Wchodzenie do działającego kontenera

Aby wykonać operacje w kontenerze, użyj polecenia docker exec . Czasami nazywa się to „wejściem do kontenera”, ponieważ wszystkie polecenia są wykonywane wewnątrz kontenera.

docker exec -it container_id bash

lub

docker exec -it container_id /bin/sh

A teraz masz powłokę w bieżącym pojemniku. Na przykład wyświetl listę plików w katalogu, a następnie pozostaw kontener:

docker exec container_id ls -la

Możesz użyć -u flag aby wejść do kontenera z określonym użytkownikiem, np. uid=1013 , gid=1023 .

docker exec -it -u 1013:1023 container_id ls -la

Uid i gid nie muszą istnieć w kontenerze, ale polecenie może powodować błędy. Jeśli chcesz uruchomić kontener i natychmiast wejść do środka, aby to sprawdzić, możesz to zrobić

docker run...; docker exec -it $(docker ps -lq) bash

docker ps -lq polecenia docker ps -lq wyświetla tylko identyfikator ostatniego uruchomionego kontenera (w l- -lq ). (oznacza to, że masz bash jako tłumacz dostępny w twoim kontenerze, możesz mieć sh lub zsh lub jakikolwiek inny)

Monitorowanie wykorzystania zasobów

Sprawdzanie wykorzystania zasobów systemowych to skuteczny sposób na znalezienie aplikacji o nieprawidłowym działaniu. Ten przykład jest odpowiednikiem tradycyjnego polecenia top dla kontenerów:

docker stats

Aby śledzić statystyki określonych kontenerów, wypisz je w wierszu poleceń:

docker stats 7786807d8084 7786807d8085

Statystyki Docker wyświetlają następujące informacje:

CONTAINER     CPU %   MEM USAGE / LIMIT   MEM %    NET I/O               BLOCK I/O
7786807d8084  0.65%   1.33 GB / 3.95 GB   33.67%   142.2 MB / 57.79 MB   46.32 MB / 0 B

Domyślnie docker stats wyświetlają identyfikator kontenerów, a to nie jest bardzo pomocne, jeśli wolisz wyświetlać nazwy kontenera, po prostu zrób

docker stats $(docker ps --format '{{.Names}}')

Monitorowanie procesów w kontenerze

Sprawdzanie zużycia zasobów systemowych to skuteczny sposób na zawężenie problemu w działającej aplikacji. Ten przykład jest odpowiednikiem tradycyjnego polecenia ps dla kontenerów.

docker top 7786807d8084

Aby filtrować formatowanie wyjścia, dodaj opcje ps w wierszu polecenia:

docker top 7786807d8084 faux

Lub, aby uzyskać listę procesów działających jako root, co jest potencjalnie szkodliwą praktyką:

docker top 7786807d8084 -u root

docker top polecenie docker top jest szczególnie przydatne podczas rozwiązywania problemów z minimalistycznymi kontenerami bez powłoki lub polecenia ps .

Dołącz do działającego kontenera

„Dołączanie do kontenera” polega na rozpoczęciu sesji terminalowej w kontekście uruchomionego kontenera (i wszelkich zawartych w nim programów). Jest to używane głównie do celów debugowania, ale może być również potrzebne, jeśli określone dane muszą zostać przekazane do programów działających w kontenerze.

Do tego celu służy polecenie attach . Ma następującą składnię:

docker attach <container>

<container> może być identyfikatorem kontenera lub nazwą kontenera. Na przykład:

docker attach c8a9cf1a1fa8

Lub:

docker attach graceful_hopper

Może być konieczne wykonanie sudo powyższych poleceń, w zależności od użytkownika i konfiguracji dokera.

Uwaga: Opcja Dołącz pozwala tylko na dołączenie do kontenera pojedynczej sesji naraz.

Ostrzeżenie: wszystkie dane z klawiatury zostaną przesłane do kontenera. Wciśnięcie Ctrl-c zabije twój kontener.

Aby odłączyć się od dołączonego pojemnika, naciśnij kolejno Ctrl-p, a następnie Ctrl-q

Aby dołączyć wiele sesji powłoki do kontenera lub po prostu alternatywnie, możesz użyć exec . Używając identyfikatora kontenera:

docker exec -i -t c8a9cf1a1fa8 /bin/bash

Używając nazwy kontenera:

docker exec -i -t graceful_hopper /bin/bash

exec uruchomi program w kontenerze, w tym przypadku /bin/bash (powłoka, prawdopodobnie taka, którą ma kontener). -i oznacza sesję interaktywną, a -t przydziela pseudo-TTY.

Uwaga: W przeciwieństwie do dołączania , naciśnięcie Ctrl-c spowoduje przerwanie polecenia exec 'd tylko podczas działania interaktywnego.

Drukowanie dzienników

Śledzenie dzienników to mniej inwazyjny sposób debugowania działającej aplikacji. Ten przykład odtwarza zachowanie tradycyjnego tail -f some-application.log na kontenerze 7786807d8084 .

docker logs --follow --tail 10 7786807d8084

To polecenie zasadniczo pokazuje standardowe wyjście procesu kontenerowego (proces z pid 1).

Jeśli twoje dzienniki nie zawierają natywnie znaczników czasu, możesz dodać flagę --timestamps .

Można także przeglądać dzienniki zatrzymanego kontenera

  • uruchom uszkodzony kontener z docker run ... ; docker logs $(docker ps -lq)

  • znajdź identyfikator kontenera lub nazwę za pomocą

docker ps -a

i wtedy

docker logs container-id lub

docker logs containername

ponieważ możliwe jest przeglądanie dzienników zatrzymanego kontenera

Debugowanie procesu kontenera Docker

Docker to tylko fantazyjny sposób na uruchomienie procesu, a nie maszyna wirtualna. Dlatego debugowanie procesu „w kontenerze” jest również możliwe „na hoście” poprzez po prostu sprawdzenie uruchomionego procesu kontenera jako użytkownika z odpowiednimi uprawnieniami do kontroli tych procesów na hoście (np. Root). Na przykład możliwe jest wyświetlenie listy każdego „procesu kontenera” na hoście, uruchamiając prosty ps jako root:

sudo ps aux

Wszelkie aktualnie uruchomione kontenery Docker zostaną wymienione w danych wyjściowych.

Może to być przydatne podczas tworzenia aplikacji do debugowania procesu uruchomionego w kontenerze. Jako użytkownik z odpowiednimi uprawnieniami w procesie kontenera można używać typowych narzędzi do debugowania, takich jak strace, ltrace, gdb itp.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow