Использование сети хоста с 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