นักเทียบท่าเขียนเรียกใช้คอนเทนเนอร์ใน net: host


109

ฉันต้องการวางไข่ 3 บริการในเน็ต "โฮสต์" โดยใช้ Docker-compose นี่คือไฟล์ docker-compose.yml ของฉัน:

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

ฉันได้รับข้อผิดพลาดต่อไปนี้:

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

ฉันใช้ boot2docker บน windows

เวอร์ชัน Docker และ Docker-compose:

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

หากฉันเรียกใช้บริการทั้งหมดด้วยตนเองโดยใช้docker run --net = "host"ทุกอย่างทำงานได้ดี

ในเอกสารฉันอ่านว่าคำสั่งnet ได้รับการสนับสนุนใน docker-compose :

สุทธิ

โหมดเครือข่าย ใช้ค่าเดียวกับพารามิเตอร์ docker client --net

สุทธิ: "สะพาน"

สุทธิ: "ไม่มี"

net: "container: [name or id]"

สุทธิ: "โฮสต์"

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

ผมทำอะไรผิดหรือเปล่า?


อัปเดตขึ้นอยู่กับคำตอบ @ andy-Shinn network_mode: "host"ของพารามิเตอร์ที่เรียกว่า ในฐานะที่เป็นเอกสารในนักเทียบท่าเขียนรุ่น 3 #network_mode
Paul Rougieux

คำตอบ:


107

เอกสารเหล่านั้นล้าสมัย ฉันเดาว่า 1.6 ใน URL นั้นใช้สำหรับ Docker 1.6 ไม่ใช่ Compose 1.6 ตรวจสอบไวยากรณ์ที่ถูกต้องที่นี่: https://docs.docker.com/compose/compose-file/#network_mode คุณกำลังมองหาnetwork_modeเมื่อใช้รูปแบบ v2 YAML


มันสับสนจริงๆ ... ฉันจะบุ๊คมาร์คลิงค์เอกสารทันที network_mode ทำงานได้ดีขอบคุณ!
Benoit Wickramarachi

ตามที่ฉันเข้าใจฉันใช้ network_mode: "host" ภายใต้บริการ?
Taras Vaskiv

29
โปรดทราบว่าnetwork_mode: hostจะใช้ไม่ได้กับนักเทียบท่าสำหรับ Mac
arviman

1
@FlavienVolken บน Mac วิธีแก้ปัญหาหนึ่งคือการใช้โฮสต์ IP อย่างชัดเจน มีชื่อโฮสต์พิเศษบางอย่างที่คุณสามารถใช้ซึ่งชี้ไปที่สิ่งนี้ (docker_host_domain หรืออะไรทำนองนั้นฉันลืม)
oooyaya

75

เพียงแค่พิมพ์

network_mode: "host"


ไม่สามารถรวม 'network_mode' และ 'networks' ได้ ในกรณีที่คุณมีเครือข่ายอยู่แล้วจะใช้ไม่ได้
Alex Efimov

1
network_mode: hostจะไม่ทำงานบนนักเทียบท่าสำหรับ Mac
Vallie

38

คุณสามารถลองเพิ่ม

network_mode: "host"

ตัวอย่าง:

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

มีตัวเลือกรายการ

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


ในกรณีนี้การส่งต่อพอร์ตถูกละเว้นหรือไม่
toing_toing

3

บางทีฉันอาจจะตอบช้ามาก แต่ฉันก็มีปัญหาในการกำหนดค่าเครือข่ายโฮสต์ใน Docker compose จากนั้นฉันก็อ่านเอกสารอย่างละเอียดและทำการเปลี่ยนแปลงและได้ผล โปรดทราบว่าการกำหนดค่านี้มีไว้สำหรับเวอร์ชันเขียนเทียบท่า "3.7" ที่นี่ einwohner_net และ elk_net_net คือเครือข่ายที่ผู้ใช้กำหนดเองซึ่งจำเป็นสำหรับแอปพลิเคชันของฉัน ฉันใช้ host net เพื่อรับเมตริกของระบบ

ลิงก์ไปยังเอกสาร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
> ใช้เฉพาะเมื่อคุณใช้คำสั่ง Docker stack หากคุณใช้คำสั่ง docker-compose ให้ใช้ network_mode แทน
thisismydesign

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.