从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_URL
到ip addr show
的输出。
一个可行的解决scheme是简单地将–net = host参数添加到docker run中,例如:
docker run -d --net=host my/container
这样,主机的networking就与容器共享了,它可以通过localhost ip(127.0.0.1)访问rabbimq服务器,