Использование сети хоста с docker-compose

Я пытаюсь настроить контейнер с двумя сетями с docker-compose, Я хотел бы, чтобы одна из этих сетей была host сеть (то есть: как будто я бегал docker run --net=host) и другой пользовательской сети.

Я попробовал это:

version: '3'

networks:
  test:
    driver: bridge
  host:
    external: true

services:
  helloworld:
    image: python:3.6-alpine
    networks:
      - test
      - host
    cap_add:
      - NET_ADMIN
      - NET_RAW
    ports:
      - 0.0.0.0:8080:8080
    command: sh -c "cd /tmp && python -m http.server 8080"

Я получаю эту ошибку:

$ docker-compose up
Removing blah_helloworld_1
Starting 8743618e8af4_blah_helloworld_1 ... error

ERROR: for 8743618e8af4_blah_helloworld_1  network-scoped alias is supported only for containers in user defined networks

ERROR: for helloworld  network-scoped alias is supported only for containers in user defined networks
ERROR: Encountered errors while bringing up the project.

2 ответа

Пока указано в docker network ls он работает совсем иначе, чем в других сетях.

По умолчанию каждый контейнер изолирован в собственном отдельном сетевом пространстве имен. Когда контейнер помещается в "хост-сеть" (используя network_mode: host с помощью compose) контейнер просто остается в сетевом пространстве имен хоста.

Контейнер не может быть в сети моста (например, test), а также быть в host network одновременно с этим потребует, чтобы этот контейнер одновременно находился как в сетевом пространстве имен хоста, так и имел свое собственное отдельное сетевое пространство имен.

Согласно документам:

  • цель: порт внутри контейнера
  • опубликовано: публично открытый порт
  • протокол: протокол порта (tcp или udp)
  • режим: хост для публикации порта хоста на каждом узле или вход для порта режима роя для балансировки нагрузки.

Пример:

 ports:
   - target: 8080
     published: 8080
     protocol: tcp
     mode: host
Другие вопросы по тегам