Docker Compose, uruchamianie kontenerów w net: host

104

Chcę odrodzić 3 usługi w sieci „host” za pomocą docker-compose. Oto mój plik docker-compose.yml:

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

Otrzymałem następujący błąd:

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

Używam boot2docker w systemie Windows.

Wersja Docker i Docker-Compose:

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

Jeśli uruchamiam wszystkie usługi ręcznie, docker run --net = "host"wszystko działa dobrze.

W dokumentacji przeczytałem, że polecenie net jest obsługiwane w docker-compose :

netto

Tryb sieciowy. Użyj tych samych wartości, co parametr docker client --net.

net: "bridge"

net: "none"

net: "container: [nazwa lub identyfikator]"

net: "host"

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

Co ja robię źle?

Benoit Wickramarachi
źródło
Aktualizacja oparta na odpowiedzi @ andy-shinn, parametr nazywa się network_mode: "host". Jak udokumentowano w docker compose w wersji 3 #network_mode .
Paul Rougieux

Odpowiedzi:

105

Te dokumenty są nieaktualne. Zgaduję, że 1.6 w adresie URL jest dla Dockera 1.6, a nie dla Compose 1.6. Sprawdź poprawną składnię tutaj: https://docs.docker.com/compose/compose-file/#network_mode . Szukasz network_modepodczas korzystania z formatu YAML v2.

Andy Shinn
źródło
To naprawdę mylące ... Od razu dodam do zakładek link do dokumentacji. network_mode działa dobrze, dzięki!
Benoit Wickramarachi
Jak zrozumiałem, powinienem używać network_mode: "host" w ramach usługi?
Taras Vaskiv
27
uwaga, że network_mode: hostnie będzie działać na
platformie docker
1
@FlavienVolken na Macu, jednym z rozwiązań jest jawne użycie adresu IP hosta. Jest jakaś specjalna nazwa hosta, której możesz użyć, która wskazuje na to (docker_host_domain lub coś w tym rodzaju, zapomniałem).
oooyaya,
72

Po prostu wydrukuj

network_mode: "host"

Andrey
źródło
„Tryb_sieci” i „Sieci” nie mogą być łączone. Jeśli masz już sieci - to nie zadziała.
Alex Efimov
1
network_mode: hostnie będzie działać na dockerze dla Maca
Vallie
34

możesz spróbować po prostu dodać

network_mode: "host"

przykład:

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

dostępna opcja listy

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
źródło
czy przekierowanie portu jest w tym przypadku ignorowane?
toing_toing
3

Może odpowiadam bardzo późno. Ale miałem też problem z konfiguracją sieci hosta w docker compose. Potem dokładnie przeczytałem dokumentację, wprowadziłem zmiany i zadziałało. Należy pamiętać, że ta konfiguracja jest przeznaczona dla wersji Docker-Compose „3.7”. Tutaj einwohner_net i elk_net_net to moje sieci zdefiniowane przez użytkownika wymagane dla mojej aplikacji. Używam sieci hosta, aby uzyskać metryki systemowe.

Link do dokumentacji 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
źródło
2
> Używane tylko wtedy, gdy używasz poleceń stosu docker. Jeśli używasz polecenia docker-compose, użyj zamiast tego trybu_sieciowego.
thisismydesign
-8

usuń opcję warn config dla services.app: 'net', będzie działać.

Jerome
źródło