Docker compose, запуск контейнеров в net: host


104

Я хочу создать 3 сервиса в сети "host" с помощью 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.

сеть: "мост"

сеть: "нет"

сеть: "контейнер: [имя или идентификатор]"

сеть: "хост"

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

Что я делаю не так?


Обновление на основе ответа @andy-shinn, параметр вызывается network_mode: "host". Как описано в docker compose version 3 #network_mode .
Paul Rougieux

Ответы:


105

Эти документы устарели. Я предполагаю, что 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не будет работать на докере для Mac
arviman

1
@FlavienVolken на Mac, одно из решений - явно использовать IP-адрес хоста. Вы можете использовать какое-то специальное имя хоста, которое указывает на это (docker_host_domain или что-то в этом роде, я забыл).
oooyaya 07

73

Просто распечатайте

network_mode: "host"


"режим_сети" и "сети" нельзя комбинировать. Если у вас уже есть сети - не получится.
Алексей Ефимов

1
network_mode: hostне будет работать на докере для Mac
Валли

34

вы можете попробовать просто добавить

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. Затем я внимательно прочитал документацию, внес изменения, и все заработало. Обратите внимание, что эта конфигурация предназначена для docker-compose версии "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 05

-8

удалите параметр конфигурации warn для services.app: 'net', он будет работать.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.