Ricerca…


Sintassi

  • statistiche docker [OPZIONI] [CONTENITORE ...]
  • log del docker [OPZIONI] CONTENITORE
  • finestra mobile [OPZIONI] CONTENITORE [ps OPZIONI]

Entrare in un contenitore funzionante

Per eseguire operazioni in un contenitore, utilizzare il comando docker exec . A volte questo è chiamato "entrare nel contenitore" poiché tutti i comandi sono eseguiti all'interno del contenitore.

docker exec -it container_id bash

o

docker exec -it container_id /bin/sh

E ora hai una shell nel tuo contenitore funzionante. Ad esempio, elenca i file in una directory e lascia il contenitore:

docker exec container_id ls -la

È possibile utilizzare il -u flag per immettere il contenitore con un utente specifico, ad esempio, uid=1013 , gid=1023 .

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

L'uid e il gid non devono esistere nel contenitore ma il comando può causare errori. Se si desidera avviare un contenitore e accedere immediatamente al fine di controllare qualcosa, è possibile farlo

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

il comando docker ps -lq restituisce solo l'id dell'ultimo (il contenitore l in -lq ) avviato. (questo suppone che tu abbia bash come interprete disponibile nel tuo contenitore, potresti avere sh o zsh o qualsiasi altro)

Monitorare l'utilizzo delle risorse

Ispezionare l'utilizzo delle risorse di sistema è un modo efficace per trovare applicazioni che presentano un comportamento anomalo. Questo esempio è equivalente al comando top tradizionale per i contenitori:

docker stats

Per seguire le statistiche di contenitori specifici, elencali sulla riga di comando:

docker stats 7786807d8084 7786807d8085

Le statistiche Docker mostrano le seguenti informazioni:

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

Per impostazione predefinita, le docker stats visualizzano l'id dei contenitori, e questo non è molto utile, se preferisci visualizzare i nomi del container, basta fare

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

Monitoraggio dei processi in un contenitore

Ispezionare l'utilizzo delle risorse di sistema è un modo efficace per limitare un problema su un'applicazione live. Questo esempio è un equivalente del comando tradizionale ps per contenitori.

docker top 7786807d8084

Per filtrare il formato dell'output, aggiungi le opzioni ps sulla riga di comando:

docker top 7786807d8084 faux

Oppure, per ottenere l'elenco dei processi in esecuzione come root, che è una pratica potenzialmente dannosa:

docker top 7786807d8084 -u root

Il comando docker top risulta particolarmente utile quando si risolvono i problemi di contenitori minimalistici senza shell o il comando ps .

Allegare a un contenitore in esecuzione

'Allegare a un contenitore' è l'atto di avviare una sessione terminale all'interno del contesto in cui è in esecuzione il contenitore (e tutti i programmi in esso contenuti). Questo è principalmente usato per scopi di debug, ma potrebbe anche essere necessario se dati specifici devono essere passati a programmi in esecuzione all'interno del contenitore.

Il comando attach è utilizzato per fare questo. Ha questa sintassi:

docker attach <container>

<container> può essere l'id del contenitore o il nome del contenitore. Per esempio:

docker attach c8a9cf1a1fa8

O:

docker attach graceful_hopper

Potrebbe essere necessario sudo i comandi di cui sopra, a seconda del vostro utente e come finestra mobile è impostato.

Nota: Collega consente solo una sessione di shell singola da collegare a un contenitore alla volta.

Attenzione: tutti gli input da tastiera verranno inoltrati al contenitore. Colpire Ctrl-c ucciderà il tuo contenitore.

Per staccare da un contenitore collegato, premere successivamente Ctrl-p e poi Ctrl-q

Per collegare più sessioni di shell a un contenitore o semplicemente come alternativa, è possibile utilizzare exec . Utilizzando l'id del contenitore:

docker exec -i -t c8a9cf1a1fa8 /bin/bash

Usando il nome del contenitore:

docker exec -i -t graceful_hopper /bin/bash

exec eseguirà un programma all'interno di un contenitore, in questo caso /bin/bash (una shell, presumibilmente una che ha il contenitore). -i indica una sessione interattiva, mentre -t alloca uno pseudo-TTY.

Nota: Diversamente dal collegamento , premendo Ctrl-c si termina il comando exec 'd solo quando viene eseguito in modo interattivo.

Stampa dei registri

Seguire i registri è il modo meno intrusivo per eseguire il debug di un'applicazione live. Questo esempio riproduce il comportamento della tail -f some-application.log tradizionale tail -f some-application.log sul contenitore 7786807d8084 .

docker logs --follow --tail 10 7786807d8084

Questo comando mostra fondamentalmente l'output standard del processo contenitore (il processo con pid 1).

Se i tuoi log non includono in modo nativo il timestamping, puoi aggiungere il flag --timestamps .

È possibile anche guardare i log di un container fermo

  • avvia il contenitore docker run ... ; docker logs $(docker ps -lq) con la docker run ... ; docker logs $(docker ps -lq)

  • trova l'ID contenitore o il nome con

docker ps -a

e poi

docker logs container-id o

docker logs containername

come è possibile guardare i registri di un container fermo

Debugging del processo contenitore Docker

Docker è solo un modo elegante per eseguire un processo, non una macchina virtuale. Pertanto, il debug di un processo "in un contenitore" è anche possibile "sull'host" semplicemente esaminando il processo del contenitore in esecuzione come utente con le autorizzazioni appropriate per ispezionare quei processi sull'host (ad es. Root). Ad esempio, è possibile elencare ogni "processo contenitore" sull'host eseguendo un semplice ps come root:

sudo ps aux

Tutti i contenitori Docker attualmente in esecuzione saranno elencati nell'output.

Questo può essere utile durante lo sviluppo dell'applicazione per il debug di un processo in esecuzione in un contenitore. Come utente con autorizzazioni appropriate, è possibile utilizzare utility di debug tipiche nel processo contenitore, come strace, ltrace, gdb, ecc.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow