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

Come connettersi a Localhost all'interno di un contenitore Docker

Quando si lavora con Docker, di solito si containerizza i servizi che formano lo stack e si utilizza la rete tra container per comunicare tra di loro. A volte potresti aver bisogno di un container per parlare con un servizio sul tuo host che non è stato containerizzato. Ecco come accedere a localhost o 127.0.0.1 da un container Docker.

L'opzione facile

Docker Desktop 18.03+ per Windows e Mac supporta host.docker.internal come alias funzionante per localhost . Usa questa stringa all'interno dei tuoi contenitori per accedere al tuo computer host.

  • localhost e 127.0.0.1 – Questi si risolvono nel contenitore .
  • host.docker.internal – Questo si risolve all'host esterno.

Se stai eseguendo un server MySQL sul tuo host, i container Docker potrebbero accedervi collegandosi a host.docker.internal:3306 . Questa è la tecnica più semplice quando lavori su un computer Windows o Mac.

Gli utenti Docker Engine su Linux possono abilitare host.docker.internal anche tramite il --add-host flag per docker run . Inizia i tuoi contenitori con questo flag per esporre la stringa host:

docker run -d --add-host host.docker.internal:host-gateway my-container:latest

Il --add-host flag aggiunge una voce al /etc/hosts del contenitore file. Il valore mostrato sopra mappa host.docker.internal al gateway host del contenitore, che corrisponde al localhost reale valore. Potresti sostituire host.docker.internal con la tua stringa se preferisci.

Connessione alla rete host

Docker fornisce un host rete che consente ai contenitori di condividere lo stack di rete del tuo host. Questo approccio significa localhost all'interno di un contenitore si risolve nell'host fisico, anziché nel contenitore stesso.

I container vengono lanciati con la rete host aggiungendo il --network=host bandiera:

docker run -d --network=host my-container:latest

Ora il tuo container può fare riferimento a localhost o 127.0.0.1 direttamente.

Se utilizzi Docker Compose, modifica la definizione del servizio del tuo container per includere la network_mode campo:

services:
  my-service:
    network_mode: host

Ci sono alcuni avvertimenti a questo approccio. È importante considerare tutte le implicazioni prima di utilizzarlo. I container normalmente ottengono la propria rete privata separata dallo stack dell'host. Quando specifichi --network=host , il contenitore eredita per impostazione predefinita le impostazioni di rete condivise dal tuo host.

Tutte le porte esposte dal container verranno esposte sull'host , anche se non sono esplicitamente dichiarati con -p bandiera. Il nome host predefinito del contenitore corrisponderà a quello dell'host, sebbene questo possa essere modificato con --hostname bandiera.

La rete host può essere un problema di sicurezza che rompe il modello di isolamento dei container Docker. Può comunque essere utile in scenari in cui sei sicuro che i contenitori in esecuzione non entreranno in conflitto tra loro o causeranno problemi nell'ambiente host. La modalità di rete host è anche più veloce della modalità bridge predefinita in quanto non esiste un livello di virtualizzazione per il passaggio del traffico.

Accesso all'host con la modalità bridge predefinita

È ancora possibile accedere al tuo host dai contenitori nel bridge predefinito modalità di rete. Devi solo fare riferimento al suo IP di rete Docker, invece di localhost o 127.0.0.1 .

La maggior parte delle installazioni di Docker Engine rappresenterà l'host come 172.17.0.1 sulla docker0 predefinita rete di ponti. Puoi controllare il tuo IP eseguendo questo comando sul tuo host:

ip addr show docker0

L'IP Docker del tuo host verrà mostrato su inet linea. Collegati a questo indirizzo IP dai tuoi container per accedere con successo ai servizi in esecuzione sul tuo host.

Una trappola di questo approccio è che potresti non essere in grado di connetterti a servizi che si legano direttamente a localhost . Dovrai assicurarti che i tuoi servizi stiano ascoltando le connessioni sul tuo IP bridge Docker, oltre a localhost e 127.0.0.1 . Altrimenti vedrai connection refused o errori simili all'interno del tuo contenitore.

Riepilogo

Hai diverse opzioni quando devi raggiungere al di fuori di un container Docker il localhost della tua macchina . Se utilizzi Windows o Mac, è meglio utilizzare il host.docker.internal integrato alias. Gli utenti Linux possono configurare qualcosa di simile con --add-host flag quando si avvia un container.

La modalità di rete host è un'alternativa universale che consente ai contenitori di condividere lo stack di rete dell'host. Puoi fare riferimento a localhost direttamente, ma è necessario essere consapevoli dei rischi e dei limiti. Non è un'opzione adatta quando è richiesto un forte isolamento della rete.

Rimanere con la modalità bridge può essere l'opzione migliore per i carichi di lavoro che la supportano. Associa i servizi del tuo host al suo IP Docker, quindi utilizza quell'indirizzo per connetterti dall'interno del tuo container. Ciò ti consente di utilizzare la rete virtualizzata per container di Docker fornendo un percorso al tuo host quando necessario.


Docker
  1. Come installare WordPress utilizzando Docker

  2. Come collegare i contenitori Docker

  3. Come eseguire MySQL in un contenitore Docker

  4. Come SSH in un contenitore Docker

  5. Come installare Vim in un contenitore Docker

Come utilizzare Docker Cp per copiare file tra host e contenitori

Come eseguire PHPMyAdmin in un contenitore Docker

Come eseguire Grafana in un contenitore Docker

Come configurare un container Docker Apache

Come copiare file tra host e contenitore Docker

Come eseguire i contenitori Docker