使用Raspberry PI和Docker容器的Pika到RabbitMQ连接失败

我正在做一个Raspberry PI的简单设置,通过RabbitMQ与服务器进行通信,而我并没有build立连接。 这是设置:

  1. 客户端:Raspberry PI(Raspbien Debian 8.0),Python 2.7和Pika 0.10.0
  2. RabbitMQ服务器:MacMini运行10.11.6 – OS X El Capitan与Docker

在Mac上执行Docker:

docker run -v /Users/tigelane/Documents/Development/brimstone_manager:/var/lib/rabbitmq -d --hostname my-rabbit --name some-rabbit rabbitmq:3 

在客户端执行的Python代码:

 def rabbit_post(): entry = get_ipaddress() post_time = datetime.datetime.now().strftime("%d %B %Y : %I:%M%p") rabbit_server = 'machine.tigelane.com' credentials = pika.PlainCredentials('machine', 'machine') connectionParams = pika.ConnectionParameters(host=rabbit_server, credentials=credentials) connection = pika.BlockingConnection(connectionParams) channel = connection.channel() channel.queue_declare(queue='hello') try: channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') print(" [x] Sent 'Hello World!'") except: print ("Unable to post to server: {}".format(rabbit_server)) connection.close() 

我一直看到这个错误:

回溯(最近一次调用的最后一个):在main()文件的“./brimstone_post.py”中的第75行的文件“./brimstone_post.py”,在主rabbit_post()文件的“./brimstone_post.py”中,第71行。第58行,在init中 self__process_io_for_connection_setup()文件中的“/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py”,行339中的rabbit_post connection = pika.BlockingConnection(connectionParams) “/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py”,第374行,在_process_io_for_connection_setup self._open_error_result.is_ready)文件“/usr/local/lib/python2.7/dist -packages / pika / adapters / blocking_connection.py“,第395行,在_flush_output中引发exceptions.ConnectionClosed()pika.exceptions.ConnectionClosed

我已经阅读了一些其他的post,并尝试了一些像下面这样的事情来排除故障:

  1. 查看rabbitmq日志:docker logs docker logs some-rabbit日志文件没有显示任何连接。
  2. 捕获覆盆子的stream量,看看我是否试图发送stream量到服务器: sudo tcpdump port 5672
  3. 确保防火墙closures/端口在Mac上打开。

我终于意识到,在Docker容器中没有-p选项将端口转发到容器。 我改变了容器在命令行打开端口5672,现在它正在工作。 希望这可以帮助其他人使用RabbitMQ上的hub.docker.com的文档。

这是他们给docker容器的例子: $ docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3

这是我用来启动我的RabbitMQdocker容器的新命令,它运行良好: docker run -v /Users/tigelane/Documents/Development/brimstone_manager:/var/lib/rabbitmq -d --hostname my-rabbit --name some-rabbit -p 5672:5672 rabbitmq:3

虽然我认为我已经解决了我的问题,但是我有这种唠叨的感觉,我错过了某些东西(除了可能需要添加的其他端口),也可能是因为端口在示例中被忽略了,他们只是离开了它,认为每个人都会自然地添加端口,因为这是你如何使用Docker容器。 无论哪种方式,请随时纠正我的错误。