我想测试运行订阅了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?
答案 0 :(得分:2)
有时你需要从你的内部连接到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)
我敢肯定,这将为很多人节省时间。
谢谢。