Как использовать rabbitmqctl для подключения к rabbitmqserver в контейнере docker?

я использовал docker для запуска моего rabbitmqserver. Как я могу использовать rabbitmqctl для подключения к rabbitmqserver в контейнере docker?

порт 5672 был выставлен и сопоставлен с портом 5672 моего хоста. Но я все равно получаю следующую ошибку:

Status of node rabbit@m2 ...
Error: unable to connect to node rabbit@m2: nodedown

5 ответов


rabbitmqctl использует Erlang Распределенный Протокол (EDP) для связи с RabbitMQ. Порт 5672 предоставляет протокол AMQP. Вы можете исследовать порт EDP, который использует ваш экземпляр RabbitMQ:

$ netstat -uptan | grep beam
tcp        0      0 0.0.0.0:55950           0.0.0.0:*               LISTEN      31446/beam.smp  
tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      31446/beam.smp  
tcp        0      0 0.0.0.0:55672           0.0.0.0:*               LISTEN      31446/beam.smp  
tcp        0      0 127.0.0.1:55096         127.0.0.1:4369          ESTABLISHED 31446/beam.smp  
tcp6       0      0 :::5672                 :::*                    LISTEN      31446/beam.smp  

это означает, что RabbitMQ:

  • подключен к EPMD (Erlang Port Mapper Daemon) на 127.0.0.1:4369, чтобы узлы могли видеть друг друга
  • ожидает входящего соединения EDP на порту 55950
  • ждет Соединение AMQP на портах 5672 и 55672
  • ждет входящих управление HTTP подключение по порту 15672

сделать rabbitmqctl возможность подключения к RabbitMQ вы также должны перенаправить порт 55950 и разрешить экземпляру RabbitMQ подключиться к 127.0.0.1:4369. Возможно, что порт RabbitMQ EDP является динамическим, поэтому, чтобы сделать его статическим, вы можете попробовать использовать ERL_EPMD_PORT переменная переменные среды Erlang или использовать inet_dist_listen_min и inet_dist_listen_max of параметры конфигурации ядра Erlang и применить его с переменная среды RabbitMQ - export RABBITMQ_CONFIG_FILE="/path/to/my_rabbitmq.conf

my_rabbitmq.conf

[{kernel,[{inet_dist_listen_min, 55950},{inet_dist_listen_min, 55950}]}].

или вы можете использовать Плагин Управления RabbitMQ. Он более функциональный и простой в настройке.


предполагая, что ваш контейнер называется rabbitmq и работает:

docker exec rabbitmq rabbitmqctl start_app

Create a rabbitmq environment variables config file at /etc/rabbitmq/rabbitmq-env.conf
Add NODENAME=rabbit@localhost to it (note that just localhost didn't work)
sudo service rabbitmq-server start

это работает для меня!!


я получил эту ошибку, пытаясь настроить RabbitMQ на кластере на машине ubuntu и fedora:

el@apollo:/etc/rabbitmq$ sudo rabbitmqctl join_cluster rabbit@192.168.1.8
Clustering node rabbit@apollo with 'rabbit@192.168.1.8' ...
Error: unable to connect to nodes ['rabbit@192.168.1.8']: nodedown

DIAGNOSTICS
===========

attempted to contact: ['rabbit@192.168.1.8']

rabbit@192.168.1.8:
  * unable to connect to epmd (port 4369) on 192.168.1.8: address 
    (cannot connect to host/port)


current node details:
- node name: rabbitmqctl7233@apollo
- home dir: /var/lib/rabbitmq
- cookie hash: g0tS9zEdo7OEDSZaDTGirA==

я смог устранить эту ошибку, открыв порт 4369 и 59984 на машине 192.168.1.8, которая является одним из подчиненных узлов кластера:

el@defiant ~ $ su -
Password:
[root@defiant ~]# iptables -I INPUT -p tcp --dport 4369 --syn -j ACCEPT
[root@defiant ~]# iptables -I INPUT -p tcp --dport 59984 --syn -j ACCEPT

порт 4369 не был включен брандмауэр. Когда я включил брандмауэр "выключен". Все заработало.