Это может быть вызвано тем, что порты заблокированы между узлами. Сеть Swarm Mesh использует «входную» сеть для подключения опубликованного порта к VIP для службы. Эта входящая сеть является оверлейной сетью, реализованной с помощью vxlan. Для этого вам нужно:
- TCP-порт 2377 для управления кластером
- TCP и UDP-порт 7946 для связи между узлами
- UDP-порт 4789 для наложения сетевого трафика
Ссылка: https://docs.docker.com/network/overlay/
Возможно, эти порты могут быть заблокированы на многих уровнях, включая iptables, брандмауэры на маршрутизаторах, и я даже видел, как VMware блокирует это с помощью своего инструмента NSX, который также реализовал vxlan.
Для iptables я обычно использую следующие команды:
iptables -A INPUT -p tcp -m tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 2377 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 7946 -j ACCEPT
iptables -A INPUT -p tcp -m udp --dport 4789 -j ACCEPT
iptables -A INPUT -p 50 -j ACCEPT
Вышеуказанное будет отличаться, если вы используете firewalld или вам нужно изменить правила брандмауэра на сетевых маршрутизаторах.