Docker in Windows: come connettersi al contenitore dall'host utilizzando il contenitore IP?

io ho

  • Windows 10
  • Docker per Windows V. 1.12.5 Rev 9503, che non si basa più su boot2docker o VirtualBox.

Ho una serie di istanze JBoss in esecuzione nelle immagini di Docker (172.18.0.2 è un database):

  • istanza 1: nome: jboss-eap, IP: 172.18.0.3
  • istanza 2: nome: jboss-eap-arquillian, IP: 172.18.0.4

che funziona contemporaneamente. Ogni istanza di JBoss esport, ad esempio, le porte 8787, 8080 e 8443.

Ho anche creato una networking ponte: crea la networking docker – bridge driver –subnet 172.18.0.0/24 bridged_network

Attualmente, ho impostato un'orificio di port locale in modo tale che l'host possa accedere ai diversi servizi utilizzando un prefisso (ad esempio, quando accede alla port 8080 dell'istanza 1, l'host utilizza localhost: 28080 per connettersi). Ma questo è piuttosto errato.

Ora, voglio accedere a quelle porte dall'host utilizzando l'IP del contenitore, ad esempio chiamando 172.18.0.4:8080 (passo successivo: usando il nome host: jboss-eap-arquillian: 8080). Mentre questo funziona senza intoppi dal contenitore al contenitore, non sono stato in grado di impostarlo per connettersi dall'host.

Esiste un'interface di networking Windows (tipo: DockerNAT), avendo IP 10.0.75.1, ma è ansible che l'ho creata manualmente (in certo … stava cercando un po 'di tempo). Ma questo è utile quando si lega la port del contenitore a questo dispositivo, ad esempio eseguire il docker … -p 10.0.75.1:8080:8080. Posso allora call il servizio utilizzando 10.0.75.1:8080, ma questo non mi aiuta per il secondo contenitore.

Ho anche cercato di utilizzare il dispositivo di networking host di Docker, ma che. sembra funzionare solo per una macchina b. Non posso impostare staticamente l'IP, che è necessario per i test JUnit che eseguono una configuration statica. Nota: non posso fare affidamento sulla networking DHCP per assegnare un IP all'avvio, poiché cambio frequentemente la mia networking (e quindi il DHCP), provocando nuovamente un IP non definito.

Quindi, in fondo, cerco un modo per impostare la networking / contenitore in modo tale da poter call il servizio fornito dal contenitore (ad esempio sulla port 8080) utilizzando l'IP contenitore (ad esempio 172.18.0.3 per esempio 1) dall'host utilizzando 172.18.0.3:8080.

Sul docker per le windows è ansible utilizzare l'indirizzo 10.0.75.1:8080, ma è necessario configurare il firewall, un modo migliore è utilizzare l'indirizzo 10.0.75.2:8080,

per entrambi gli indirizzi è necessario pubblicare la port quando si esegue il contenitore

docker run -p 8080:8080 image_name 

Maggiori informazioni https://github.com/docker/for-win/issues/334#issuecomment-297030101

non puoi. docker non è una macchina virtuale e non è ansible accedere all'host docker tramite l'indirizzo IP.

vedere la mia stessa domanda qui: https://forums.docker.com/t/access-dockerized-services-via-the-containers-ip-address/21151

e la mia realizzazione di come funziona, qui: https://derickbailey.com/2016/08/29/so-youre-saying-docker-isnt-a-virtual-machine/

se è necessario utilizzare l'applicazione ospitata nel contenitore, dal tuo host locale, esporre la port dell'applicazione con l'opzione -p della docker run

docker run -p 8080:8080 image_name

e quindi connettersi a localhost:8080 per quel servizio