【问题标题】:How to use rabbitmqctl to connect to the rabbitmqserver in the docker container?如何使用rabbitmqctl连接docker容器中的rabbitmqserver?
【发布时间】:2013-12-03 07:55:19
【问题描述】:

我使用 docker 来启动我的 rabbitmqserver。如何使用rabbitmqctl连接docker容器中的rabbitmqserver?

端口 5672 已暴露并映射到我主机的 5672 端口。但我仍然收到以下错误:

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

【问题讨论】:

    标签: rabbitmq docker rabbitmqctl


    【解决方案1】:

    假设您的容器名为 rabbitmq 并且正在运行:

    docker exec rabbitmq rabbitmqctl start_app
    

    【讨论】:

      【解决方案2】:

      rabbitmqctl 使用Erlang Distributed Protocol (EDP) 与 RabbitMQ 通信。 5672 端口提供 AMQP 协议。您可以调查您的 RabbitMQ 实例使用的 EDP 端口:

      $ 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:

      • 在 127.0.0.1:4369 上连接到 EPMD (Erlang Port Mapper Daemon) 以使节点能够看到彼此
      • 等待端口 55950 上的传入 EDP 连接
      • 等待端口 5672 和 55672 上的 AMQP 连接
      • 等待端口 15672 上的传入 HTTP management 连接

      要使rabbitmqctl 能够连接到 RabbitMQ,您还必须转发端口 55950 并允许 RabbitMQ 实例连接到 127.0.0.1:4369。 RabbitMQ EDP 端口可能是动态的,因此要使其成为静态,您可以尝试使用Erlang environment variablesERL_EPMD_PORT 变量或使用Erlang Kernel configuration optionsinet_dist_listen_mininet_dist_listen_max 并使用RabbitMQ environment variable - @ 应用它987654334@

      my_rabbitmq.conf

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

      或者您可以使用RabbitMQ Management Plugin。它功能更强大,设置更简单。

      【讨论】:

      • 如何用Docker实现“允许RabbitMQ实例连接到127.0.0.1:4369”?到目前为止,我有以下选项:-p 55950:55950 -p 5672:5672 -p 15672:15672 -e ERL_EPMD_PORT=55950 运行 docker 容器时,我有 epmd 在主机上运行。但是,我仍然无法将 rabbitmqctl 连接到容器中的 Rabbit 实例。
      【解决方案3】:

      我尝试在 ubuntu 和 fedora 机器上的集群上设置 RabbitMQ 时遇到此错误:

      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==
      

      我可以通过打开集群从属节点之一的 192.168.1.8 机器上的 4369 和 59984 端口来消除此错误:

      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
      

      【讨论】:

      • 你能解释一下为什么打开端口 59984 有帮助吗?
      【解决方案4】:

      防火墙未启用端口 4369。当我“关闭”防火墙时。一切都开始工作了。

      【讨论】:

        【解决方案5】:

        只需输入docker exec -t rabbitmq sh 然后你就可以访问你的 docker 环境的终端了。

        进入后,输入rabbitmqctl 看看它是否有效

        希望对你有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-11
          • 1970-01-01
          • 2017-02-13
          • 2019-01-25
          • 1970-01-01
          • 2022-11-11
          相关资源
          最近更新 更多