Как объединить сеть хоста с сетью по умолчанию в docker-compose - PullRequest
1 голос
/ 04 октября 2019

Я создаю сервис docker-compose, который включает в себя два контейнера. Один из этих контейнеров ( узел ) предназначен для поддержки механизма автообнаружения и должен быть частью локальной сети хоста (поскольку мне нужно, чтобы многоадресные UDP-пакеты обрабатывались маршрутизатором локальной сети, а не встроенным-in docker router).

Хотя «network_mode: host» в docker-compose.yml отлично справляется с задачей, мне нужно, чтобы эта служба также была доступна для второго контейнера ( qtcore ) по имени хоста через стандартную сеть docker-compose (например: http://node:37326). И это, по-видимому, невозможно, если для network_mode установлено значение "host".

Мой docker-compose.yml в настоящее время выглядиткак это:

version: '3.7'
services:
    qtcore:
        image: yansidorovtesseris/qtcore
        build: .
        container_name: qtcore
        depends_on:
            - node
        env_file: defaults.env
        ports:
            - "8000:8000"

    node:
        image: yansidorovtesseris/komodo
        container_name: node
        env_file: node.env
        ports:
            - "37326:37326"
            - "1900:1900"
        network_mode: host
        volumes:
            - $HOME/node_state:/komodo/.komodo/$AC_NAME

Я пытался использовать пример из документации docker-compose (https://docs.docker.com/compose/compose-file/#host-or-none) для подключения сети хоста как внешней сети. С мыслью добавить оба хостаи сети по умолчанию для службы.

version: '3.7'
services:
    node:
        ...
        networks:
            hostnet: {}
        ...
networks:
    hostnet:
        external: true
        name: host

Но все, что я получаю, когда пытаюсь запустить docker-compose, это следующая ошибка: ERROR: for node network-scoped alias is supported only for containers in user defined networks

1 Ответ

1 голос
/ 15 октября 2019

Хорошо, мне кажется, что невозможно настроить службу для одновременного использования опций "host" и "bridge". Был бы рад, если бы кто-то указал на обратное, хотя. Я придумал простой обходной путь, позволяющий сервисам работать как единое устройство создания докера в локальной сети хоста, и в то же время использовать «extra_hosts» (предложенный hNczy) для поиска имени хоста. Это не идеально и может не подходить для каждого сценария, но это помогает мне. По сути, две службы используют сейчас «network_mode: host», и «extra_hosts» службы «qtcore» поставляется с именем «node», связанным с 127.0.0.1.

version: '3.7'
services:
    qtcore:
        image: yansidorovtesseris/qtcore
        build: .
        container_name: qtcore
        depends_on:
            - node
        env_file: defaults.env
        network_mode: host
        extra_hosts:
            - "node:127.0.0.1"
        ports:
            - "8000:8000"

    node:
        image: yansidorovtesseris/komodo
        container_name: node
        env_file: node.env
        ports:
            - "37326:37326"
            - "1900:1900"
        network_mode: host
        volumes:
            - $HOME/node_state:/komodo/.komodo/$AC_NAME
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...