Docker compose, ejecutando contenedores en net: host

102

Quiero generar 3 servicios en la red "host" usando docker-compose. Aquí está mi archivo docker-compose.yml:

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

Tuve el siguiente error:

$ 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'

Estoy usando boot2docker en Windows.

Docker y Docker-compose versión:

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

Si ejecuto todos los servicios manualmente usando docker run --net = "host"todo está funcionando bien.

En la documentación, leí que el comando net es compatible con docker-compose :

red

Modo de red. Utilice los mismos valores que el parámetro docker client --net.

net: "puente"

net: "ninguno"

net: "contenedor: [nombre o id]"

net: "host"

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

¿Qué estoy haciendo mal?

Benoit Wickramarachi
fuente
Actualización basada en la respuesta de @ andy-shinn, se llama al parámetro network_mode: "host". Como se documenta en docker compose versión 3 #network_mode .
Paul Rougieux

Respuestas:

103

Esos documentos están desactualizados. Supongo que el 1.6 en la URL es para Docker 1.6, no Compose 1.6. Consulte la sintaxis correcta aquí: https://docs.docker.com/compose/compose-file/#network_mode . Lo que busca network_modecuando usa el formato v2 YAML.

Andy Shinn
fuente
Eso es realmente confuso ... Marcaré el enlace de documentación de inmediato. network_mode está funcionando bien gracias!
Benoit Wickramarachi
Según tengo entendido, debo usar network_mode: "host" en service?
Taras Vaskiv
27
tenga en cuenta que network_mode: hostno funcionará en Docker para Mac
arviman
1
@FlavienVolken en mac, una solución es usar la IP del host de forma explícita. Hay un nombre de host especial que puede usar que apunta a esto (docker_host_domain o algo así, lo olvido).
oooyaya
72

Solo imprime

network_mode: "host"

Andrey
fuente
'network_mode' y 'networks' no se pueden combinar. En caso de que ya tenga redes, no funcionará.
Alex Efimov
1
network_mode: hostno funcionará en Docker para Mac
Vallie
32

puedes intentar solo agregar

network_mode: "host"

ejemplo:

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

opción de lista disponible

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

Sarath Ak
fuente
¿Se ignora el reenvío de puertos en este caso?
toing_toing
3

Quizás estoy respondiendo muy tarde. Pero también estaba teniendo problemas para configurar la red de host en la ventana acoplable. Luego leí la documentación a fondo e hice los cambios y funcionó. Tenga en cuenta que esta configuración es para la versión "3.7" de docker-compose. Aquí einwohner_net y elk_net_net son mis redes definidas por el usuario requeridas para mi aplicación. Estoy usando la red de host para obtener algunas métricas del sistema.

Enlace a la documentación 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
Raman Sharma
fuente
2
> Solo se usa si usa comandos de pila de Docker. Si usa el comando docker-compose, use network_mode en su lugar.
thisismydesign
-8

elimine la opción de configuración de advertencia para services.app: 'net', puede funcionar.

Jerome
fuente