【问题标题】:Accessing rabbitmq running on local machine from docker container从 docker 容器访问在本地机器上运行的 rabbitmq
【发布时间】:2016-08-25 13:07:37
【问题描述】:

我想测试一个运行 python 脚本订阅 rabbitmq 队列的 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 吗?

【问题讨论】:

    标签: docker rabbitmq pika


    【解决方案1】:

    根据Docker CLI docs

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

    所以您需要做的就是将:QUEUE_URL 设置为ip addr show 的输出。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

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

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

        谢谢。

        【讨论】:

        • 最初接受的答案已经有四年了,但host.docker.internal 是一个容器从 docker 18.03 开始​​访问同一主机上的另一个服务或容器的首选方式
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-11
        • 1970-01-01
        • 2018-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多