Docker komponiert und führt Container in net: host aus

102

Ich möchte 3 Dienste im "Host" -Netz mit Docker-Compose erzeugen. Hier ist meine Datei docker-compose.yml:

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

Ich habe folgenden Fehler erhalten:

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

Ich benutze boot2docker unter Windows.

Docker und Docker-Compose-Version:

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

Wenn ich alle Dienste manuell ausführe, docker run --net = "host"funktioniert alles einwandfrei.

In der Dokumentation habe ich gelesen, dass der Befehl net in docker-compose unterstützt wird :

Netz

Netzwerkmodus. Verwenden Sie dieselben Werte wie der Parameter docker client --net.

net: "Brücke"

net: "keine"

net: "container: [name oder id]"

net: "host"

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

Was mache ich falsch?

Benoit Wickramarachi
quelle
Update basierend auf der Antwort von @ andy-shinn, der Parameter wird aufgerufen network_mode: "host". Wie in Docker Compose Version 3 #network_mode dokumentiert .
Paul Rougieux

Antworten:

103

Diese Dokumente sind veraltet. Ich vermute, die 1.6 in der URL ist für Docker 1.6, nicht für Compose 1.6. Überprüfen Sie die korrekte Syntax hier: https://docs.docker.com/compose/compose-file/#network_mode . Sie suchen, network_modewenn Sie das YAML-Format v2 verwenden.

Andy Shinn
quelle
Das ist wirklich verwirrend ... Ich werde den Dokumentationslink sofort mit einem Lesezeichen versehen. network_mode funktioniert gut danke!
Benoit Wickramarachi
Wie ich verstanden habe, sollte ich network_mode verwenden: "host" under service?
Taras Vaskiv
26
Beachten Sie, dass network_mode: hostauf Docker für Mac nicht funktioniert
Arviman
1
@FlavienVolken auf dem Mac besteht eine Lösung darin, die Host-IP explizit zu verwenden. Es gibt einen speziellen Hostnamen, den Sie verwenden können, der darauf hinweist (docker_host_domain oder ähnliches, ich vergesse).
oooyaya
72

Einfach ausdrucken

network_mode: "host"

Andrey
quelle
'network_mode' und 'network' können nicht kombiniert werden. Falls Sie bereits Netzwerke haben, funktioniert dies nicht.
Alex Efimov
1
network_mode: hostfunktioniert nicht auf Docker für Mac
Vallie
31

Sie können versuchen, einfach hinzuzufügen

network_mode: "host"

Beispiel:

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

Listenoption verfügbar

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
quelle
Wird die Portweiterleitung in diesem Fall ignoriert?
toing_toing
3

Vielleicht antworte ich sehr spät. Ich hatte aber auch ein Problem beim Konfigurieren des Host-Netzwerks in Docker Compose. Dann habe ich die Dokumentation gründlich gelesen und die Änderungen vorgenommen und es hat funktioniert. Bitte beachten Sie, dass diese Konfiguration für die Docker-Compose-Version "3.7" gilt. Hier sind einwohner_net und elk_net_net meine benutzerdefinierten Netzwerke, die für meine Anwendung erforderlich sind. Ich verwende Host Net, um einige Systemmetriken zu erhalten.

Link zur Dokumentation 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
quelle
2
> Wird nur verwendet, wenn Sie Docker-Stack-Befehle verwenden. Wenn Sie den Befehl docker-compose verwenden, verwenden Sie stattdessen network_mode.
Thisismydesign
-8

Löschen Sie die Option warn config für services.app: 'net', es kann funktionieren.

Hieronymus
quelle