сеть докеров - режим хоста против режима моста - сопоставление портов
В производстве, host
режим сети рекомендуется bridge
режим, чтобы избежать пересылки пакетов.
$ docker container run --help | grep "network"
--network network Connect a container to a network
--network-alias list Add network-scoped alias for the container
Тип ресурса Cloudformation AWS::ECS::TaskDefinition
option (NetworkMode) внутреннее использование определяет сетевой режим для запуска контейнеров докеров, где он говорит:
Если сетевой режим
host
, вы не можете запустить несколько экземпляров одной и той же задачи в одном экземпляре контейнера, когда используются сопоставления портов.
С помощью AWS::ECS::TaskDefinition
,
Я запускаю единственный экземпляр master jenkins(контейнер докеров) с отображением портов 8080:8080
. Отображение порта 8080 EC2 с портом контейнера 8080.
Что значит сказать? не может запускать несколько экземпляров одной и той же задачи на одном экземпляре контейнера, когда используются сопоставления портов....
1 ответ
Когда вы используете network mode
в качестве хоста контейнер разделяет сетевое пространство имен хоста, как описано здесь, и, следовательно, отображение портов не действует. Это означает, что вы не можете сопоставить порт 8080 контейнера с портом 80 хоста, потому что, когда контейнер предоставляет порт 8080, он будет доступен непосредственно на порту 8080 на хост-машине.
невозможно запустить несколько экземпляров одной и той же задачи на одном экземпляре контейнера, когда используются сопоставления портов....
Экземпляр контейнера - это в основном особый тип экземпляра EC2, как описано здесь. Это означает, что если вы запускаете более 1 экземпляра одной и той же задачи на одном хост-компьютере (экземпляре контейнера), они будут открывать один и тот же порт (например, 8080), который, в свою очередь, сопоставляется непосредственно с одним и тем же портом на хост-машине и, следовательно, приводит к конфликту.