从Docker容器访问在本地机器上运行的rabbitmq

我想testing一个docker镜像,运行一个订阅rabbitmq队列的python脚本。 我在我的本地机器上运行rabbitmq,并且想要testing在同一台机器上运行的docker容器,并订阅当地的rabbimq服务器。

我希望脚本读取在docker run命令中设置的环境variables'QUEUE_IP'。

python脚本:

#!/usr/bin/env python import pika host = os.environ.get('QUEUE_IP') connection = pika.BlockingConnection(pika.ConnectionParameters( host=host)) channel = connection.channel() channel.queue_declare(queue='hello') def callback(ch, method, properties, body): print(" [x] Received %r" % body) channel.basic_consume(callback, queue='hello', no_ack=True) print(' [*] Waiting for messages. To exit press CTRL+C') channel.start_consuming() 

它不工作,如果QUEUE_IP = 127.0.0.1,我也尝试使用机器的本地IP地址,但我只得到

 pika.exceptions.ProbableAuthenticationError 

是否有任何简单的方法从docker集装箱访问本地rabbitmq?

根据Docker CLI文档 :

有时您需要从容器内连接到Docker主机。 要启用此function,请使用–add-host标志将Docker主机的IP地址传递给容器。 要查找主机地址,请使用ip addr show命令。

所以你只需要设置: QUEUE_URLip addr show的输出。

一个可行的解决scheme是简单地将–net = host参数添加到docker run中,例如:

 docker run -d --net=host my/container 

这样,主机的networking就与容器共享了,它可以通过localhost ip(127.0.0.1)访问rabbimq服务器,