Can not join swarm

Can someone tell me what this is?
steps taken
disabled selinux
disabled iptables
looks like poorly designed feature in getting started.
ping works, swarm manager actual IP is replaced by: <IP_swarm_manager>

root@localhost ~]# docker swarm join --token SWMTKN-1-0atdk2enx7ukfurb9l41db6n1hoikdurps9owtq3qlbfy79nni-00rtg13nz6e6jepfrh4pvw0mh <IP_swarm_manager>:2477
Error response from daemon: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = “transport: Error while dialing dial tcp <IP_swarm_manager>:2477: connect: no route to host”

PING <IP_swarm_manager>(<IP_swarm_manager>) 56(84) bytes of data.
64 bytes from <IP_swarm_manager>: icmp_seq=1 ttl=63 time=0.508 ms
64 bytes from <IP_swarm_manager>: icmp_seq=2 ttl=63 time=0.470 ms

If you refer to “disabled iptables”, then no, just trying to make sure that its not the common mistakes that could be the cause of this.

Good luck with your troubleshooting

Not sure of your setup, but let’s pretend it is something like this.

  • You have 2 dockers hosts; DC-N1 (master), and DC-N2 ( host you are trying to join to the swarm).
  • You have a swarm created and running from DC-N1 (with UCP).
  • You have SElinux and iptables disabled on both DC-N1 and DC-N2
  • From DC-N1 you can ping DC-N2
  • From DC-N2 you can ping DC-N1

I would start by checking the networking on both hosts;

docker network ls

On DC-N1 I’m expecting you to see something like;

NETWORK ID NAME DRIVER SCOPE
8f853519a021 bridge bridge local
990c94c73c6b docker_gwbridge bridge local
c39b48423128 host host local
xdkw3yc2olmg ingress overlay swarm
9693793fe90e none null local

On DC-N2 I’m expecting you to see something like;

NETWORK ID NAME DRIVER SCOPE
528b0bcc3383 bridge bridge local
2bd4f75faced host host local
cf67483166d8 none null local

In the above case, I believe (still learning docker myself) the problem is there is no “overlay” network on DC-N2. The hosts can communicate with each other over the bridge network (so ping works).
However, when you try and get DC-N2 to join the swarm, the absence of an overlay network means DC-N2 can’t find a route to the swarm IP; hence the “no route to host” message.

I solved this problem by disabling the firewall on the master, but you can also open the port on the firewall.

solution 1
$ systemctl stop firewalld

solution 2
$ firewall-cmd --zone=public --add-port=2377/tcp --permanent
$ firewall-cmd --reload
$ firewall-cmd --query-port=2377/tcp

Unfortunately the “no route” message is confusing and doesn’t make sense (to me at least).