pika.exceptions.ConnectionClosed:到172.18.0.3:5672的连接失败:连接被拒绝

我试图连接一个Pika客户端与RabbitMQ服务器。 他们都在不同的docker图像,他们在同一个dockernetworking。 我build立了我的networking

docker network create my_first_net 

我正在运行RabbitMQ图像rabbitmq

 docker run -d --network my_first_net --hostname rabbitmqhost -p 35672:15672 -p 45672:5672 rabbitmq 

我正在运行Pika图像ms2-1

 docker run --network my_first_net --hostname rabbitmq ms2-1 

这是pika-client ms2.py的代码:

 import pika exchange = 'gateway_exchange' myName = 'microservice2' myKey = '#.ms2.#' gwKey = 'gw' credentials = pika.PlainCredentials('guest', 'guest') parameters = pika.ConnectionParameters('rabbitmq', 5672, '/', credentials) def send(key, message): send_conn = pika.BlockingConnection(parameters) send_ch = send_conn.channel() send_ch.exchange_declare(exchange=exchange, exchange_type='topic') send_ch.basic_publish(exchange=exchange, routing_key=key, body=message) print(" [x] Sent %r:%r" % (key, message)) send_conn.close() def receive(): connection = pika.BlockingConnection(parameters) channel = connection.channel() channel.exchange_declare(exchange=exchange, exchange_type='topic') result = channel.queue_declare(exclusive=True) queue_name = result.method.queue binding_key = myKey channel.queue_bind(exchange=exchange, queue=queue_name, routing_key=binding_key) print(' [*] Waiting for messages. To exit press CTRL+C') def callback(ch, method, properties, body): print(" [x] Received %r:%r" % (method.routing_key, body)) send('Response-from-' + myName + '-to-.' + gwKey, body) channel.basic_consume(callback, queue=queue_name, no_ack=True) channel.start_consuming() if __name__ == "__main__": receive() 

当我尝试运行pika图像时出现以下错误

  Traceback (most recent call last): File "ms2.py", line 61, in <module> receive() File "ms2.py", line 36, in receive connection = pika.BlockingConnection(parameters) File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 374, in __init__ self._process_io_for_connection_setup() File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 414, in _process_io_for_connection_setup self._open_error_result.is_ready) File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 468, in _flush_output raise exceptions.ConnectionClosed(maybe_exception) pika.exceptions.ConnectionClosed: Connection to 172.18.0.3:5672 failed: [Errno 111] Connection refused 

RabbitMQ容器的ip地址是172.18.0.2当我做172.18.0.2 docker inspect时候是68.50.13.82当我在容器里面curl ifconfig.me的时候, 我确认容器正在使用`netstat -ap tcp |监听端口5672 grep -i“听”

我认为Errno 111与authentication错误有关,但是我无法连接到我的机器的IP地址。

我的下一步应该怎样解决这个问题?

编辑:我意识到,我没有添加一个 – 标志运行RabbitMQ服务器时,所以我删除了该容器,并开始一个新的:

 docker run -d --network my_first_net --hostname rabbitmqhost --name rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq 

但现在我得到的错误:

 Traceback (most recent call last): File "ms2.py", line 61, in <module> receive() File "ms2.py", line 36, in receive connection = pika.BlockingConnection(parameters) File "/usr/local/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 374, in __init__ self._process_io_for_connection_setup() File "/usr/local/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 414, in _process_io_for_connection_setup self._open_error_result.is_ready) File "/usr/local/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 466, in _flush_output raise maybe_exception socket.gaierror: [Errno 8] nodename nor servname provided, or not known 

由于在运行pika容器时重新使用相同的主机名,问题就在发生

 docker run --network my_first_net --hostname rabbitmq ms2-1 

您不应该将您的rabbitmq容器名称设置为相同的主机名称。 我跑了相同的步骤,我能够连接