Я хотел бы понять, как внутренний порт в Docker работает, а именно я хотел бы знать, какие интерфейсы на хосте используются. Давайте рассмотрим три случая:
(1)
docker run -p 80:80 nginx
(2)
dokcer-compose:
для Docker Swarm
....
services:
ports:
published: 80
target: 80
....
Обратите внимание, что в этом случае мы используем overlay
сеть.
(3)
dokcer-compose:
для Рой Docker
....
services:
ports:
published: 80
target: 80
mode: host
....
Прежде всего, давайте выделим тот факт, что это зависит от процесса в контейнере, какой интерфейс он выберет
связывать. Однако, где это связано в хосте? Я имею в виду, какой интерфейс (lo, eth0 ..) выбран в качестве интерфейса для привязки?
В частности, в чем разница между подходом (2) и (3)?
Редактировать
Давайте рассмотрим четвертый случай:
(4)
`dokcer-compose:` for *docker swarm*
....
services:
s1:
ports:
published: 1234
target: 1234
mode: host
networks:
n1
s2:
ports:
published: 1234
target: 1234
mode: host
networks:
n1
networks:
n1:
driver: overlay
, где s1
и s2
вынуждены развертываться на разных узлах (с использованием ограничений). Теперь давайте предположим, что s1
говорит с s2
и s2
говорит с s1
, используя порт 1234
и:
(1) IP-адрес службы (или название службы)
(2) IP-адрес хоста (физический адрес).
Скажите пожалуйста, если в случае (1) или (2) используется оверлейная сеть n1
. Обратите внимание, что обе службы подключены к этой сети.