Se stai cercando una vista dettagliata di tutti i componenti principali di Docker da immagini Docker, contenitori e così via, il comando Docker inspect fa per te.
In questo tutorial imparerai come diventare un investigatore per scoprire informazioni dettagliate su molti componenti Docker per il debug, la risoluzione dei problemi o solo la tua semplice curiosità.
Cominciamo!
Prerequisiti
Se desideri seguire passo dopo passo, assicurati di avere quanto segue:
- Docker:questo tutorial utilizza Docker v19.03.11 su Ubuntu 18.04.5 LTS.
- Qualsiasi immagine Docker scaricata e disponibile. Questo tutorial utilizza l'ultima immagine Docker NGINX disponibile su Docker Hub.
- Almeno un container in esecuzione sull'host Docker.
Ispezione delle immagini Docker con Docker Inspect
Docker Inspect
può fornire informazioni su molti diversi componenti Docker, ma iniziamo prima con uno dei componenti più popolari; immagini. Se hai scaricato un'immagine, come controlli le informazioni su quell'immagine? Scopriamolo.
Supponendo che tu abbia almeno un'immagine sul tuo host Docker, usa inspect
comando per interrogare quell'immagine. Il comando seguente presuppone che tu abbia un'immagine chiamata nginx
sul tuo host.
docker image inspect nginx
Una volta eseguito, il comando sopra restituisce una serie di informazioni tramite JSON su quella particolare immagine. Alcuni attributi degni di nota sono:
- Il tag immagine.
- L'ora in cui è stata creata l'immagine.
- Il nome host del contenitore associato con l'immagine Docker nginx.
- La rete porta il container a disposizione della rete esterna.
- Noterai anche i volumi allegati al contenitore che appartiene all'immagine Docker nginx.
Ottenere informazioni dettagliate sulle reti Docker
La docker inspect
il comando non è solo relegato all'acquisizione di informazioni su immagini e contenitori; può anche interrogare le reti. Le reti Docker consentono ai container di comunicare in diversi modi, ad esempio attraverso una rete bridge (una rete privata), una rete host (una rete pubblica) o una rete overlay.
Conoscere le reti Docker è importante in quanto consente di passare a un'altra rete Docker in qualsiasi momento secondo la necessità dell'applicazione disconnettendosi e quindi riconnettendosi.
Supponendo che tu sia ancora sul terminale:
1. Esegui il comando seguente. La docker network ls
comando elenca tutte le reti presenti nella finestra mobile. Avrai bisogno dell'output di questo comando per trovare l'ID della rete.
docker network ls
Successivamente, passa un ID di rete alla docker inspect network
comando. Questo comando restituisce varie informazioni sulla rete particolare, come mostrato di seguito.
docker inspect network 4748f122c987
1. Il tipo di rete.
2. L'indirizzo di sottorete utilizzato dalla rete.
3 e 4. Informazioni di riepilogo su ogni container che utilizza questa particolare rete.
Capire i modelli di Docker's Go e il Format
Parametro
Finora, hai imparato come utilizzare il comando di ispezione Docker senza utilizzare parametri di opzioni aggiuntivi. Ma se hai bisogno di manipolare il formato di output, considera l'utilizzo del --format
bandiera. Il --format
utilizza i modelli Go per filtrare e visualizzare le informazioni restituite da docker inspect
.
Insieme al flag di formato vengono utilizzate varie funzioni, come join, println, table, ecc. Discutiamone alcune!
Ad esempio, potresti voler unire alcuni valori dall'output di un particolare contenitore. In tal caso, il join
il comando funziona bene. Di seguito, vedrai che il join
comando concatena le stringhe insieme (nginx, -g, daemon off
) con ogni elemento separato da un separatore (,
).
docker inspect --format '{{join .Args " , "}}' container_id
Forse vorresti capitalizzare un valore? Usa il upper
comando.
docker inspect --format "{{upper .Name}}" container_id
Puoi trovare molti esempi diversi di utilizzo del format
parametro.
Trovare il nome dell'immagine di base di un container Docker
Nella sezione precedente, hai visto come ottenere una visualizzazione dettagliata di tutte le tue immagini Docker, inclusi i contenitori che utilizzano tali immagini. Ma cosa succede se conosci già un ID contenitore e devi trovare rapidamente l'immagine da cui è stato creato? Puoi fornire l'ID del contenitore a docker inspect
.
Per trovare il nome dell'immagine da cui è stato creato un particolare contenitore, esegui docker inspect
di seguito comando. Il comando seguente passa l'ID contenitore (8f34d039fa3a
in questo caso) per docker inspect
e usa il format
parametro per restituire solo l'image
valore dalla Config
nodo nell'output JSON.
# 8f34d039fa3a is the container represented with ContainerID.
docker inspect --format='{{.Config.Image}}' 8f34d039fa3a
Puoi vedere l'intero Config
il nodo appare come sotto e dove si trova l'Image
il nome deriva da.
Trovare l'indirizzo IP, l'indirizzo Mac e i collegamenti delle porte di un container
Anche se ora sai come trovare la rete utilizzata da un container, come fai a sapere quale indirizzo IP o indirizzo Mac e Port Binding su quella rete utilizza un container? Hai indovinato! docker inspect
.
Per restringere l'indirizzo IP utilizzato da un container, passa l'ID container a docker inspect
comando. Ancora una volta, usa il format
parametro per filtrare il JSON indesiderato per ottenere esattamente ciò che stai cercando.
Vedrai il format
parametro parametro di seguito dice a docker inspect
solo per restituire il valore incorporato all'interno di NetworkSettings
→Networks
→ IPAddress
Attributo JSON che utilizza l'range
attributo. L'attributo Range ti consente di scorrere un array, impostando il .
valore a ciascun elemento dell'array.
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my_container
Vedrai le NetworkSettings
principali nodo sottostante e dove si trova il IPAddress
il valore è nidificato.
Allo stesso modo, per trovare l'indirizzo MAC del contenitore, usa docker inspect
comando contenitore come mostrato di seguito.
Di nuovo, vedrai che il format
parametro parametro di seguito utilizza l'range
attributo ma questa volta trova l'indirizzo Mac del contenitore controllando NetworkSettings
→Networks
→ Mac address
.
docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' 3dd206041249
Infine, per controllare tutti i collegamenti di porta di un container esegui il seguente docker inspect
comando. Vedrai il format
parametro parametro di seguito utilizza l'range
attributo per trovare i collegamenti delle porte del contenitore controllando NetworkSettings
→HostPort
.
Qualcuno dovrebbe conoscere i collegamenti delle porte perché se una porta è già utilizzata, non dovrebbe essere utilizzata di nuovo; in caso contrario, genererà un messaggio di errore che indica che la porta è già allocata.
docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' 8f34d039fa3a
Ottenere una vista dettagliata del volume Docker utilizzando Docker Inspect
Finora, hai imparato come trovare informazioni dettagliate su immagini, contenitori e rete, ma non hai imparato lo storage. Cambiamo le cose.
Per assicurarci che il tutorial abbia almeno un volume montato collegato a un container, creiamo prima un container e montiamo un volume di archiviazione.
Se hai già un volume di archiviazione montato su un container, puoi saltare questa parte.
Il comando seguente crea un nuovo contenitore Docker chiamato my_container
, espone la porta 80 all'host (-p 80:80
), monta un volume in base alla /var/container_dir dell'host directory chiamata mount_val (-v mounted_vol:/var/container_dir
) utilizzando nginx
immagine.
docker run --name my_container -p 80:80 -v mounted_vol:/var/container_dir nginx
Ora che hai un volume montato su un contenitore, fornisci il nome del volume a docker volume inspect
. Si noti di seguito che il comando restituisce l'output JSON, fornendo solo informazioni sul volume di archiviazione montato.
docker volume inspect mounted_vol
Conclusione
Ora dovresti essere in grado di utilizzare docker inspect
comando in molte situazioni diverse, dall'interrogazione di informazioni su immagini, contenitori, rete e archiviazione.
Come prevedi di utilizzare docker inspect
per richiedere informazioni sul tuo ambiente Docker?