Docker compone, eseguendo contenitori in net: host


104

Voglio generare 3 servizi nella rete "host" usando docker-compose. Ecco il mio file docker-compose.yml:

version: '2'
services:
  mysql:
    image: mysql
    net: "host"
  nginx:
    image: nginx
    net: "host"
  app:
    image: tomcat
    net: "host"

Ho ricevuto il seguente errore:

$ docker-compose up
[31mERROR[0m: Validation failed in file '.\docker-compose.yml', reason(s):
Unsupported config option for services.app: 'net'
Unsupported config option for services.mysql: 'net'
Unsupported config option for services.nginx: 'net'

Sto usando boot2docker su Windows.

Docker e versione Docker-compose:

$ docker -v
Docker version 1.10.2, build c3959b1
$ docker-compose -version
docker-compose version 1.6.0, build cdb920a

Se eseguo tutti i servizi manualmente utilizzando docker run --net = "host"tutto funziona correttamente .

Nella documentazione ho letto che il comando net è supportato in docker-compose :

netto

Modalità di rete. Utilizza gli stessi valori del parametro docker client --net.

net: "bridge"

net: "nessuno"

net: "contenitore: [nome o id]"

net: "host"

https://docs.docker.com/v1.6/compose/yml/#net

Che cosa sto facendo di sbagliato?


Aggiornamento basato sulla risposta di @ andy-shinn, il parametro viene chiamato network_mode: "host". Come documentato nella finestra mobile compose la versione 3 #network_mode .
Paul Rougieux

Risposte:


105

Quei documenti sono obsoleti. Immagino che l'1.6 nell'URL sia per Docker 1.6, non per Compose 1.6. Controlla la sintassi corretta qui: https://docs.docker.com/compose/compose-file/#network_mode . Stai cercando network_modequando utilizzi il formato YAML v2.


È davvero confuso ... Aggiungerò subito il collegamento alla documentazione. network_mode funziona bene grazie!
Benoit Wickramarachi

Come ho capito, dovrei usare network_mode: "host" in servizio?
Taras Vaskiv

27
nota che network_mode: hostnon funzionerà sulla finestra mobile per Mac
arviman

1
@FlavienVolken su Mac, una soluzione è utilizzare l'IP host in modo esplicito. C'è un nome host speciale che puoi usare che punta a questo (docker_host_domain o qualcosa del genere, non ricordo).
oooyaya

73

Basta stampare

network_mode: "host"


"network_mode" e "networks" non possono essere combinati. Nel caso in cui tu abbia già reti, non funzionerà.
Alex Efimov,

1
network_mode: hostnon funzionerà sulla finestra mobile per Mac
Vallie il

34

puoi provare ad aggiungere

network_mode: "host"

esempio :

version: '2'
services:
  feedx:
    build: web
    ports:
    - "127.0.0.1:8000:8000"
    network_mode: "host"

opzione elenco disponibile

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

https://docs.docker.com/compose/compose-file/#network_mode


il port forwarding viene ignorato in questo caso?
toing_toing

3

Forse rispondo molto tardi. Ma ho anche avuto problemi con la configurazione della rete host in Docker Compose. Poi ho letto a fondo la documentazione e ho apportato le modifiche e ha funzionato. Tieni presente che questa configurazione è per la versione docker-compose "3.7". Qui einwohner_net e elk_net_net sono le mie reti definite dall'utente richieste per la mia applicazione. Sto usando la rete host per ottenere alcune metriche di sistema.

Collegamento alla documentazione https://docs.docker.com/compose/compose-file/#host-or-none

version: '3.7'
services:
  app:
    image: ramansharma/einwohnertomcat:v0.0.1
    deploy:
      replicas: 1
      ports:
       - '8080:8080'
    volumes:
     - type: bind
       source: /proc
       target: /hostfs/proc
       read_only: true
     - type: bind
       source: /sys/fs/cgroup
       target: /hostfs/sys/fs/cgroup
       read_only: true
     - type: bind
       source: /
       target: /hostfs
       read_only: true
    networks:
     hostnet: {}
    networks:
     - einwohner_net
     - elk_elk_net
networks:
 einwohner_net:
 elk_elk_net:
   external: true
 hostnet:
   external: true
   name: host

2
> Utilizzato solo se utilizzi i comandi dello stack docker. Se utilizzi il comando docker-compose, utilizza invece network_mode.
thisismydesign

-8

elimina l'opzione warn config per services.app: 'net', può funzionare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.