OK, eu entendi!
os nomes de host de cada nó precisam estar alinhados dentro do contêiner.
Na máquina host (q2) eu verifiquei quais hosts eles conheciam no arquivo hosts:
# This file was generated by OpsWorks
# any manual changes will be removed on the next update.
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
# OpsWorks Layer State
127.0.0.1 localhost.localdomain localhost
127.0.1.1 q2.localdomain q2
10.0.3.56 q1.localdomain q1
10.0.3.101 q2.localdomain q2
root@q2:/# ping q1
PING q1.local (10.0.3.56): 56 data bytes
^C--- q1.local ping statistics ---
2 packets transmitted, 0 packets received, 100% packet loss
Então, ocorreu-me que não importa o que a máquina host sabe, é o que o contêiner docker conhece. Então, eu entrei no recipiente e fiz a mesma coisa:
root@q2:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 q2.local
Agora estamos em algo! Então, eu adicionei uma entrada para o mestre do nó:
root@q2:/# echo "10.0.3.56 q1.local q1" >> /etc/hosts
root@q2:/# which ping
/bin/ping
root@q2:/# ping q1
PING q1.local (10.0.3.56): 56 data bytes
E, deu outro giro dentro do contêiner
root@q2:/# rabbitmqctl stop_app
Stopping node rabbit@q2 ...
root@q2:/# rabbitmqctl join_cluster rabbit@q1
Clustering node rabbit@q2 with rabbit@q1 ...
root@q2:/#
E agora, cada nó reconhece que está em cluster! Woot!
Acho que para clustering com o docker, modificarei o comando docker para montar o arquivo hosts /etc/hosts
na imagem do docker com -v /etc/hosts:/etc/hosts:ro
, e isso deve funcionar apenas magicamente
Outro passo que esqueci de mencionar: a caixa local do Ubuntu tinha uma versão antiga do erlang em execução que eu tinha que remover (e também tinha coelho).