GNU/Linux >> Linux Esercitazione >  >> Linux

Inoltra la porta host al contenitore docker

Come affermato in uno dei commenti, funziona per Mac (probabilmente anche per Windows/Linux):

VOGLIO COLLEGARMI DA UN CONTENITORE A UN SERVIZIO SULL'HOST

L'host ha un indirizzo IP variabile (o nessuno se non si dispone dell'accesso alla rete). Ti consigliamo di connetterti al nome DNS speciale host.docker.internal che si risolve nell'indirizzo IP interno utilizzato dall'host. Questo è a scopo di sviluppo e non funzionerà in un ambiente di produzione al di fuori di Docker Desktop per Mac.

Puoi anche raggiungere il gateway usando gateway.docker.internal .

Citato da https://docs.docker.com/docker-for-mac/networking/

Questo ha funzionato per me senza usare --net=host .


Un modo semplice ma relativamente insicuro sarebbe usare il --net=host opzione a docker run .

Questa opzione fa in modo che il contenitore utilizzi lo stack di rete dell'host. Quindi puoi connetterti ai servizi in esecuzione sull'host semplicemente utilizzando "localhost" come nome host.

Questo è più facile da configurare perché non dovrai configurare il servizio per accettare connessioni dall'indirizzo IP del tuo contenitore docker e non dovrai dire al contenitore docker uno specifico indirizzo IP o nome host a cui connettersi, basta una porta.

Ad esempio, puoi provarlo eseguendo il seguente comando, che presuppone che la tua immagine si chiami my_image , la tua immagine include il telnet utility e il servizio a cui vuoi connetterti è sulla porta 25:

docker run --rm -i -t --net=host my_image telnet localhost 25

Se pensi di procedere in questo modo, consulta le avvertenze sulla sicurezza in questa pagina:

https://docs.docker.com/articles/networking/

Dice:

--net=host -- Indica a Docker di saltare il posizionamento del contenitore all'interno di uno stack di rete separato. In sostanza, questa scelta dice a Docker di non containerizzare la rete del contenitore! Mentre i processi del contenitore saranno ancora confinati al proprio file system e all'elenco dei processi e ai limiti delle risorse, un rapido comando ip addr mostrerà che, dal punto di vista della rete, vivono "all'esterno" nell'host Docker principale e hanno pieno accesso alle sue interfacce di rete . Si noti che ciò non consente al contenitore di riconfigurare lo stack di rete dell'host, il che richiederebbe --privileged=true, ma consente ai processi del contenitore di aprire porte con un numero basso come qualsiasi altro processo root. Consente inoltre al contenitore di accedere ai servizi di rete locale come D-bus. Ciò può comportare che i processi nel contenitore siano in grado di eseguire operazioni impreviste come il riavvio del computer. Dovresti usare questa opzione con cautela.


Il tuo host docker espone un adattatore a tutti i contenitori. Supponendo che tu sia su Ubuntu recente, puoi eseguire

ip addr

Questo ti darà un elenco di adattatori di rete, uno dei quali avrà un aspetto simile a

3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 22:23:6b:28:6b:e0 brd ff:ff:ff:ff:ff:ff
inet 172.17.42.1/16 scope global docker0
inet6 fe80::a402:65ff:fe86:bba6/64 scope link
   valid_lft forever preferred_lft forever

Dovrai dire a rabbit/mongo di collegarsi a quell'IP (172.17.42.1). Successivamente, dovresti essere in grado di aprire connessioni a 172.17.42.1 dai tuoi container.


Linux
  1. Un'introduzione a Docker

  2. Esplorare il file system del contenitore Docker

  3. Cosa c'è all'interno di un'immagine/contenitore Docker?

  4. Docker in Docker non può montare il volume

  5. Rendere visibile un montaggio NFS sull'host e leggere-scrivere all'interno del contenitore Docker

Come connettersi a Localhost all'interno di un contenitore Docker

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

Come copiare file tra host e contenitore Docker

Come SSH in un Docker Container

Come gestire i container Docker

Comprensione dei mapping delle porte docker