Складання Docker, запуск контейнерів у net: host


102

Я хочу створити 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 --net.

net: "міст"

net: "немає"

net: "контейнер: [ім'я або ідентифікатор]"

net: "хост"

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

Що я роблю неправильно?


Оновлення на основі відповіді @ andy-shinn, параметр викликається network_mode: "host". Як задокументовано у версії docker compose версії 3 #network_mode .
Paul Rougieux

Відповіді:


103

Ці документи застаріли. Я припускаю, що 1.6 у URL-адресі призначений для Docker 1.6, а не Compose 1.6. Перевірте правильний синтаксис тут: https://docs.docker.com/compose/compose-file/#network_mode . Ви шукаєте, network_modeколи використовуєте формат v2 YAML.


Це справді заплутано ... Я відразу додаю посилання на документацію до закладок. network_mode чудово працює, дякую!
Бенуа Віккарамачі

Як я зрозумів, я повинен використовувати network_mode: "host" під службою?
Тарас Васьків

27
зверніть увагу, що network_mode: hostце не буде працювати на docker для Mac
arviman

1
@FlavienVolken на mac, одним із рішень є явне використання IP-адреси хосту. Існує якесь спеціальне ім’я хосту, яке ви можете використовувати, яке вказує на це (docker_host_domain або щось подібне, я забуваю).
oooyaya,

72

Просто роздрукуйте

network_mode: "host"


'network_mode' та 'network' не можна поєднувати. Якщо у вас вже є мережі - це не буде працювати.
Олексій Єфімов

1
network_mode: hostне працюватиме на docker для Mac
Валлі,

32

Ви можете спробувати просто додати

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

Можливо, я відповідаю дуже пізно. Але у мене також виникла проблема з налаштуванням хост-мережі в компонуванні докера. Потім я уважно прочитав документацію та вніс зміни, і це спрацювало. Зверніть увагу, що ця конфігурація призначена для версії докер-композитора "3.7". Тут einwohner_net та elk_net_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-compose, замість цього використовуйте network_mode.
thisismydesign

-8

видаліть опцію конфігурації попередження для services.app: 'net', це зможе працювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.