从docker容器访问在本地计算机上运行的rabbitmq

时间:2016-08-25 13:07:38

标签: docker rabbitmq pika

我想测试运行订阅了rabbitmq队列的python脚本的docker镜像。 我在我的本地机器上运行了rabbitmq,并希望测试在同一台机器上运行的docker容器,并让它订阅本地rabbimq服务器。

我希望脚本读取docker run命令中设置的环境变量'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?

3 个答案:

答案 0 :(得分:2)

根据Docker CLI docs

  

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

所以您只需将QUEUE_URL设置为ip addr show的输出。

答案 1 :(得分:1)

一个有效的解决方案是简单地将--net = host参数添加到docker run,例如:

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

这样,主机的网络与容器共享,它可以使用localhost ip(127.0.0.1)访问rabbimq服务器

答案 2 :(得分:0)

尝试了很多解决方案后,我想出了可行的解决方案。

您需要使用docker容器中的rabbitMQ主机(主要),我们要在该容器中尝试连接到RabbitMQ(这是本地设置)

host - host.docker.internal
port - 5672
user - guest (default)
password - guest (default)

我敢肯定,这将为很多人节省时间。

谢谢。