GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come ottenere l'indirizzo IP di un contenitore Docker dall'host

I container Docker non riguardano solo l'isolamento:sono spesso usati per gestire processi che devono ancora dialogare direttamente tra loro. Ma, per comunicare, dovrai spesso conoscere l'indirizzo IP di ogni container, che puoi trovare con pochi comandi.

Considera l'utilizzo di un bridge definito dall'utente

La rete Docker è un po' complicata. I container avviati per impostazione predefinita verranno inseriti nella "rete bridge" predefinita e potranno comunicare direttamente con altri container, a condizione che tu disponga del loro indirizzo IP privato. Questo può essere disattivato per un vero isolamento, ma non lo è per impostazione predefinita.

Puoi anche usare questo indirizzo per comunicare dal sistema operativo host se non vuoi associare una porta. Questo è il caso d'uso principale dell'accesso a un container direttamente tramite il suo indirizzo IP, ma probabilmente dovresti comunque semplicemente associare una porta (puoi tenerla chiusa da Internet nel tuo firewall).

Tuttavia, gli indirizzi IP sono temporanei e possono rompersi facilmente quando i container vengono arrestati e avviati. Per la comunicazione tra container, Docker offre una soluzione attraverso reti bridge definite dall'utente, che probabilmente dovresti utilizzare se hai più container che comunicano tra loro.

I container aggiunti a reti non predefinite potranno accedersi tra loro tramite il loro alias, che si risolverà automaticamente nell'IP privato. Puoi creare nuove reti, eseguire container in tali reti e connettere container esistenti alla rete. È quindi possibile accedere agli altri contenitori utilizzando l'alias come nome host; ad esempio, il contenitore NGINX qui può accedere all'istanza MongoDB con la stringa di connessione mongodb://mongohost:27017 .

docker network create example
docker run --net example --name nginx -d nginx
docker network connect example --alias mongohost mongodb

C'è molto vantaggio nell'uso dei bridge ed è consigliato rispetto al precedente --link opzione, che funziona sulla rete predefinita. Il problema principale è che i container nelle reti definite dall'utente saranno esposti l'uno alle porte dell'altro, indipendentemente dal fatto che siano pubblicati, ma puoi configurare più reti, quindi di solito questo non è un problema.

L'altro aspetto negativo è che, poiché le reti definite dall'utente forniscono un migliore isolamento, impediscono anche di accedere ai contenitori attraverso le reti con il loro indirizzo IP privato. Tutti i contenitori nella rete predefinita possono comunicare tra loro, ma una volta rimossi e inseriti in una rete definita dall'utente, tale capacità viene disabilitata. Tuttavia, puoi anche avviare il contenitore sia nella rete predefinita che in quella definita dall'utente, quindi non è un problema se scegli di rendere il contenitore visibile agli altri.

Come ottenere l'indirizzo IP da Docker

Se vuoi solo l'indirizzo IP, però, è abbastanza semplice ottenerlo dal sistema operativo host. Innanzitutto, devi trovare l'ID o il nome del contenitore per il quale desideri ottenere le informazioni, cosa che puoi fare con:

docker ps

Quindi, esegui docker inspect , che restituisce un enorme file JSON con tutte le informazioni sul contenitore. Tuttavia, siamo interessati solo all'indirizzo IP, quindi puoi passargli un'opzione di formattazione con -f per restringere il campo al solo indirizzo.

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' name_or_id

Questo comando funziona bene, ma restituisce anche informazioni solo per un contenitore di cui avrai bisogno dell'ID. Se desideri una soluzione più concreta, puoi utilizzare docker network inspect che stampa informazioni su tutti i contenitori nella rete specificata, opzionalmente formattando come tabella di ricerca JSON:

docker network inspect bridge -f '{{json .Containers}}'

Come ottenere la configurazione di rete dal container

I container Docker sono in realtà solo un meccanismo di isolamento e nulla ti impedisce di entrare nel container ed eseguire normali comandi Linux come ifconfig e ottenere l'indirizzo IP in questo modo.

Per farlo, dovrai prendere il nome o l'ID del contenitore con docker ps , quindi esegui exec -it , in questo caso, stampando tutte le informazioni IP:

docker exec -it b94ef3169cd4 ip a


Docker
  1. Come montare una directory host in un contenitore Docker

  2. Come ottenere informazioni su un contenitore in Docker

  3. Come accedere allo spazio dei nomi di rete di Docker Container dall'host

  4. Come posso ottenere informazioni sul contenitore Docker Linux dall'interno del contenitore stesso?

  5. Come ottengo il mio indirizzo IP dalla riga di comando?

Come eseguire SSH nei contenitori Docker [Passo dopo passo]

Come eseguire i contenitori Docker

Come ottenere l'indirizzo IP del contenitore Docker

Utilizzo dei contenitori Docker dalla riga di comando

Come rinominare o rinominare i contenitori Docker

Come gestire i container Docker