Come connettersi a Localhost all’interno di un contenitore Docker Come utilizzare Enums in PHP 8.1 Come eseguire il backup del server GitLab Che cos’è lo “stack JAM?” Dovresti usarlo? Come connettersi alle condivisioni di rete con l’app File iOS Come ottenere l’indirizzo IP di un container Docker dall’host Come si risolve una “testa staccata” in un repository Git?

0
138

Illustrazione che mostra il logo Docker

Quando lavori con Docker, di solito contenitori i servizi che formano il tuo stack e utilizzi la rete tra container per comunicare tra loro. A volte potresti aver bisogno di un container per parlare con un servizio sul tuo host che non è stato containerizzato. Ecco come accedere localhost o 127.0.0.1 dall’interno di un container Docker.

L’opzione facile

Supporta Docker Desktop 18.03+ per Windows e Mac 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 al contenitore.
  • host.docker.internal – Questo si risolve per l’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 di Docker Engine su Linux possono abilitare host.docker.internal anche tramite il --add-host bandiera per docker run. Avvia 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 contenitore /etc/hosts file. Il valore mostrato sopra le mappe host.docker.internal al gateway host del contenitore, che corrisponde al reale localhost valore. Potresti sostituire host.docker.internal con la tua stringa se preferisci.

Connessione alla rete host

Docker fornisce un host network 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.

Annuncio

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

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

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

Se stai utilizzando Docker Compose, modifica la definizione del servizio del contenitore per includere il 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 in genere ottengono la propria rete privata separata dallo stack dell’host. Quando specifichi --network=host, il contenitore per impostazione predefinita eredita le impostazioni di rete condivise dal tuo host.

Eventuali porte esposte dal container saranno esposte sull’host, anche se non sono dichiarati esplicitamente con il -p bandiera. Il nome host predefinito del contenitore corrisponderà a quello dell’host, sebbene questo possa essere modificato con il tasto --hostname bandiera.

La rete host può essere un problema di sicurezza che rompe il modello di isolamento dei contenitori Docker. Può comunque essere utile in scenari in cui si è certi che l’esecuzione di contenitori non entrerà in conflitto tra loro o causerà 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 per impostazione predefinita bridge modalità di rete. Devi solo fare riferimento al suo IP di rete Docker, invece di localhost o 127.0.0.1.

Annuncio

La maggior parte delle installazioni di Docker Engine rappresenterà l’host come 172.17.0.1 sull’impostazione predefinita docker0 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 sul inet linea. Connettiti 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, così come 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 la tua macchina dall’esterno di un container Docker localhost. Se sei su Windows o Mac, è meglio usare il built-in host.docker.internal alias. Gli utenti Linux possono configurare qualcosa di simile con il --add-host flag quando si avvia un contenitore.

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

Annuncio

Attenersi alla 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 usa 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.