Как использовать хост-сеть для создания докеров? - PullRequest
0 голосов
/ 13 июня 2019

Я хочу использовать docker compose с хост-сетью.

У меня есть док-контейнер, который обращается к локальному интерфейсу REST. Обычно я бегу

docker run --net=host -p 18080:8080 -t -i containera

, который может получить доступ к API REST хоста, который работает на http://127.0.0.1:8080. Поскольку я хочу масштабировать контейнер containera, я нашел docker compose для масштабирования контейнера. Но файл создания докера из документации не работает. Контейнер Docker не запрашивает REST API.

Я попытался создать следующий файл, но свойство

version: "3"
services:
  web:
    image: conatinera:latest
    network_mode: "host"
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: "0.5"
          memory: 4G 
      restart_policy:
        condition: on-failure
    ports:
      - "18080:8080"

но свойство network_mode игнорируется / не допускается. с сообщением

Ignoring unsupported options: network_mode

Ответы [ 4 ]

1 голос
/ 13 июня 2019

Эквивалентная конфигурация для docker-compose использует клавишу network_mode: https://docs.docker.com/compose/compose-file/#network_mode

Вы должны установить network_mode в "host" в вашем docker-compose.yml.

0 голосов
/ 13 июня 2019

Вы смешиваете опции, которые являются недопустимыми как при компоновке, так и при роении.

Если вы развертываете с помощью docker-compose up, ваш файл компоновки должен выглядеть следующим образом:

version: "3"
services:
  web:
    image: conatinera:latest
    network_mode: "host"        
    restart: on-failure

Параметры deploy игнорируются в режиме компоновки, а параметр портов игнорируется при использовании сети в режиме хоста.Я рекомендую не использовать сетевую работу в режиме хоста и использовать обратный прокси-сервер в другом контейнере для балансировки ваших масштабированных контейнеров.


(Не стесняйтесь игнорировать эту часть ответа, поскольку вы пояснили, что вы не 't с использованием развертываний Swarm).

Если вы используете развертывание Swarm, ваш составной файл должен выглядеть следующим образом:

version: "3.4"
services:
  web:
    image: conatinera:latest
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: "0.5"
          memory: 4G 
      restart_policy:
        condition: on-failure
    networks:
      - host

networks:
  host:
    name: host
    external: true

Опять же, опубликованные порты и работа в режиме хоста не смешиваются.Также возможно, что ваше масштабирование не удастся, потому что все контейнеры будут пытаться подключиться к одному и тому же порту.Я рекомендую не использовать работу в режиме хоста и разрешать балансировку нагрузки докера.

0 голосов
/ 13 июня 2019

Я думаю, вы должны определить файл docker-compose следующим образом: это всего лишь пример, пожалуйста, прочтите документацию: https://docs.docker.com/compose/compose-file/#network-configuration-reference

version: "3"
services:
  web:
    image: conatinera:latest
    networks:
      mynetwork: {}
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: "0.5"
          memory: 4G 
      restart_policy:
        condition: on-failure
    ports:
      - "18080:8080"
networks:
  mynetwork:
    external: true
    name: host
0 голосов
/ 13 июня 2019

На какой платформе вы находитесь?Режим host работает только в Linux AFAIK.Если network_mode не работает, попробуйте network: host?

version: '3.4'
serivces:
  some_service:
  build:
    network: host
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...