Docker compose, executando contêineres em net: host

102

Eu quero gerar 3 serviços na rede "host" usando docker-compose. Aqui está meu arquivo docker-compose.yml:

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

Recebi o seguinte erro:

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

Estou usando boot2docker no windows.

Docker e versão Docker-compose:

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

Se eu executar todos os serviços manualmente usando docker run --net = "host"tudo está funcionando bem.

Na documentação, li que o comando net é compatível com docker-compose :

internet

Modo de rede. Use os mesmos valores do parâmetro --net do cliente docker.

net: "ponte"

net: "nenhum"

net: "container: [nome ou id]"

net: "host"

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

O que estou fazendo de errado?

Benoit Wickramarachi
fonte
Atualize com base na resposta de @andy-shinn, o parâmetro é chamado network_mode: "host". Conforme documentado no docker compose versão 3 #network_mode .
Paul Rougieux

Respostas:

103

Esses documentos estão desatualizados. Estou supondo que 1.6 no URL é para Docker 1.6, não Compose 1.6. Verifique a sintaxe correta aqui: https://docs.docker.com/compose/compose-file/#network_mode . O que você está procurando network_modeao usar o formato YAML v2.

Andy Shinn
fonte
Isso é muito confuso ... Vou marcar o link da documentação imediatamente. network_mode está funcionando bem, obrigado!
Benoit Wickramarachi
Pelo que entendi, devo usar network_mode: "host" em serviço?
Taras Vaskiv
27
observe que network_mode: hostnão funcionará no docker para Mac
arviman
1
@FlavienVolken no mac, uma solução é usar o IP do host explicitamente. Existe algum nome de host especial que você pode usar que aponta para isso (docker_host_domain ou algo parecido, eu esqueci).
oooyaya
72

Basta imprimir

network_mode: "host"

Andrey
fonte
'network_mode' e 'networks' não podem ser combinados. Caso você já tenha redes - não funcionará.
Alex Efimov
1
network_mode: hostnão funciona no docker para Mac
Vallie
32

você pode tentar apenas adicionar

network_mode: "host"

exemplo:

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

opção de lista disponível

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
fonte
o encaminhamento de porta é ignorado neste caso?
toing_toing
3

Talvez eu esteja respondendo muito tarde. Mas eu também estava tendo problemas ao configurar a rede do host no docker compose. Então li a documentação completamente, fiz as alterações e funcionou. Observe que esta configuração é para docker-compose versão "3.7". Aqui, einwohner_net e elk_net_net são minhas redes definidas pelo usuário necessárias para meu aplicativo. Estou usando a rede do host para obter algumas métricas do sistema.

Link para a documentação 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
fonte
2
> Usado apenas se você usar comandos docker stack. Se você usar o comando docker-compose, use network_mode em seu lugar.
thisismydesign
-8

exclua a opção warn config para services.app: 'net', ela pode funcionar.

Jerome
fonte