Docker soạn, chạy vùng chứa trong net: host


102

Tôi muốn tạo ra 3 dịch vụ trong mạng "máy chủ lưu trữ" bằng cách sử dụng trình soạn thảo-docker. Đây là tệp docker-compost.yml của tôi:

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

Tôi gặp lỗi sau:

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

Tôi đang sử dụng boot2docker trên windows.

Docker và phiên bản Docker-compile:

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

Nếu tôi chạy tất cả các dịch vụ theo cách thủ công bằng cách sử dụng docker run --net = "host"mọi thứ đều hoạt động tốt.

Trong tài liệu tôi đọc được rằng lệnh net được hỗ trợ trong docker-soạn :

mạng lưới

Chế độ kết nối mạng. Sử dụng các giá trị giống như tham số --net của máy khách docker.

net: "cầu"

net: "không"

net: "container: [name or id]"

net: "máy chủ"

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

Tôi đang làm gì sai?


Cập nhật dựa trên câu trả lời của @ andy-shinn, tham số được gọi network_mode: "host". Theo tài liệu trong docker, soạn phiên bản 3 #network_mode .
Paul Rougieux

Câu trả lời:


103

Những tài liệu đó đã lỗi thời. Tôi đoán 1.6 trong URL là dành cho Docker 1.6, không phải Compose 1.6. Kiểm tra cú pháp chính xác tại đây: https://docs.docker.com/compose/compose-file/#network_mode . Bạn đang tìm kiếm network_modekhi sử dụng định dạng v2 YAML.


Điều đó thực sự khó hiểu ... Tôi sẽ đánh dấu liên kết tài liệu ngay lập tức. network_mode đang hoạt động tốt cảm ơn!
Benoit Wickramarachi

Như tôi đã hiểu, tôi đã sử dụng network_mode: "host" dưới dịch vụ?
Taras Vaskiv

27
lưu ý rằng network_mode: hostsẽ không làm việc trên Docker cho Mac
arviman

1
@FlavienVolken trên mac, một giải pháp là sử dụng IP máy chủ một cách rõ ràng. Có một số tên máy chủ lưu trữ đặc biệt mà bạn có thể sử dụng để trỏ đến điều này (docker_host_domain hoặc một cái gì đó tương tự, tôi quên).
oooyaya

72

Chỉ cần in

network_mode: "host"


'network_mode' và 'network' không thể được kết hợp. Trong trường hợp bạn đã có mạng - nó sẽ không hoạt động.
Alex Efimov

1
network_mode: hostsẽ không hoạt động trên
docker

32

bạn có thể thử chỉ cần thêm

network_mode: "host"

thí dụ :

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

danh sách tùy chọn có sẵn

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


chuyển tiếp cổng có bị bỏ qua trong trường hợp này không?
toing_toing

3

Có lẽ tôi đang trả lời rất muộn. Nhưng tôi cũng gặp sự cố khi định cấu hình mạng máy chủ trong soạn thư docker. Sau đó, tôi đọc kỹ tài liệu và thực hiện các thay đổi và nó hoạt động. Xin lưu ý rằng cấu hình này dành cho phiên bản docker-soạn "3.7". Ở đây einwohner_net và elk_net_net là các mạng do người dùng định nghĩa của tôi được yêu cầu cho ứng dụng của tôi. Tôi đang sử dụng host net để lấy một số chỉ số hệ thống.

Liên kết tới tài liệu 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
> Chỉ được sử dụng nếu bạn sử dụng các lệnh ngăn xếp docker. Nếu bạn sử dụng lệnh docker-compile, hãy sử dụng network_mode để thay thế.
thisismydesign

-8

xóa tùy chọn cấu hình cảnh báo cho services.app: 'net', nó sẽ có thể hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.