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

Accessing rabbitmq running on local machine from docker container

我想测试一个docker图像运行宁一个python脚本订阅rabbitmq队列。 我的本地机器上有 rabbitmq 运行ning,想在同一台机器上测试 docker 容器 运行ning 并让它订阅本地 rabbimq 服务器。

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

Sometimes you need to connect to the Docker host from within your container. To enable this, pass the Docker host’s IP address to the container using the --add-host flag. To find the host’s address, use the ip addr show command.

所以你需要做的就是设置:QUEUE_URLip addr show的输出。

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

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

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

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

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

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

我相信这会为很多人节省时间。

谢谢。