У меня есть две машины с Ubuntu 16.04 LTS, на которых я установил Docker 18.03.1-ce.Я создал рой между двумя хостами, который в основном работает (я могу развернуть сервисы, и они появляются и т. Д.).Единственная проблема заключается в том, что я не могу подключиться к опубликованным портам служб через какие-либо IP-адреса узлов, как описано несколько раз в документации Docker, если служба не запущена на этом конкретном узле.
Другими словами, если служба развернута на узле A и прослушивает порт 9000, я не могу подключиться к узлу B на порту 9000 и получить доступ к этой услуге;время соединения истеклоЕсли я пытаюсь подключиться к другому порту, скажем, к порту 9001, я получаю сообщение «Отказано в соединении», что означает, что входящая сеть как минимум прослушивает на порту 9000, и я могу проверить это с помощью netstat
.
Обе эти машины находятся в одной физической сети, и брандмауэры отключены (ufw status
говорит Status: inactive
).
Входная сеть отображается на обоих узлах:
nodeA $ docker network ls
NETWORK ID NAME DRIVER SCOPE
345229fb3285 bridge bridge local
09758f66413a docker_gwbridge bridge local
3bf43f750513 host host local
fq3cc4bfawp3 ingress overlay swarm
9dbe769a1420 none null local
kk67tdjc96vo portainer_agent-network overlay swarm
m8fholkq3tmy portal_default overlay swarm
nodeB $ docker network ls
NETWORK ID NAME DRIVER SCOPE
f8a837effb76 bridge bridge local
e4521f7a132a docker_gwbridge bridge local
312d6e547ec5 host host local
fq3cc4bfawp3 ingress overlay swarm
85da22f22522 none null local
kk67tdjc96vo portainer_agent-network overlay swarm
И docker network inspect fq3
показывает, что у меня есть три контейнера в сети, один из них ingress-endpoint
, а два других - мои собственные, и он показывает оба узла в Peers
.
Если службапубликует порт 9000, и в результате оба узла прослушивают порт 9000, почему я могу подключиться только к порту 9000 на узле A (там, где работает контейнер), а время соединения истекло на узле B?
Как я могу диагностировать, почему входящая маршрутизация не работает, как описано?