【问题标题】:How to connect to the rabbitMQ docker container?如何连接到rabbitMQ docker容器?
【发布时间】:2020-03-12 15:48:17
【问题描述】:

我正在使用命令生成一个 rabbitMQ 容器 -

docker run -d --hostname localhost --name rabbit-tox rabbitmq:3

这是 docker ps -a 输出 -

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
6d95830a43d9        rabbitmq:3          "docker-entrypoint..."   6 minutes ago       Up 6 minutes        4369/tcp, 5671-5672/tcp, 25672/tcp   rabbit-tox

docker 检查 6d95830a43d9 输出 --

[
    {
        "Id": "6d95830a43d90557009a783779442927ca4bf211198f5c4eb420b7bb78b5de08",
        "Created": "2020-03-12T15:34:12.661119753Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "rabbitmq-server"
        ],
        "State": {
            "Status": "running",
            "Running": true,

. . . 

"EndpointID": "",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "",
                    "EndpointID": "",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,

我正在尝试使用代码连接到容器 -

#!/usr/bin/env python
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('127.0.0.1'))
channel = connection.channel()

channel.queue_declare(queue='hello')
channel.basic_publish(exchange='',
                      routing_key='hello',
                      body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()

但它给出了错误 -

Traceback (most recent call last):
  File "rmqtest.py", line 4, in <module>
    connection = pika.BlockingConnection(pika.ConnectionParameters('127.0.0.1'))
  File "/home/mlokur/venv/lib/python3.7/site-packages/pika/adapters/blocking_connection.py", line 359, in __init__
    self._impl = self._create_connection(parameters, _impl_class)
  File "/home/mlokur/venv/lib/python3.7/site-packages/pika/adapters/blocking_connection.py", line 450, in _create_connection
    raise self._reap_last_connection_workflow_error(error)
pika.exceptions.AMQPConnectionError

对不起,我是rabbitMQ的新手,任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 需要绑定rabbit使用的端口或者使用--net=host
  • 鉴于 docker inspect 的输出,您应该尝试绑定的 ip 是 172.17.0.2,而不是 127.0.0.1
  • 是的,感谢您的回答。我想我一发布这个就必须使用 172.17.0.2,我觉得很蹩脚。
  • @Groot221,我建议使用 docker-compose
  • @Eitank 我希望在 tox 中运行这个容器进行集成测试。我已经在 tox 中生成 postgres 作为另一个容器。是否可以在 tox 中使用 docker -compose?

标签: python docker rabbitmq


【解决方案1】:

有两个问题我可以直接看到...

  1. 没有用户名/密码
  2. 无端口转发。

这是Dockerfile

FROM rabbitmq:management

# Define environment variables.
ENV RABBITMQ_DEFAULT_USER user
ENV RABBITMQ_DEFAULT_PASS password

ADD init.sh /init.sh

RUN ["chmod", "+x", "/init.sh"]

EXPOSE 15672

# Define default command
CMD ["/init.sh"]

这是init.sh

#!/bin/sh

# Create Rabbitmq user
( sleep 10 ; \
rabbitmqctl add_user user password ; \
rabbitmqctl set_user_tags user administrator ; \
rabbitmqctl set_permissions -p / user  ".*" ".*" ".*" ; \
echo "*** User 'user' with password 'password' completed. ***" ; \
echo "*** Log in the WebUI at port 15672 (example: http:/localhost:15672) ***") &

# $@ is used to pass arguments to the rabbitmq-server command.
# For example if you use it like this: docker run -d rabbitmq arg1 arg2,
# it will be as you run in the container rabbitmq-server arg1 arg2
rabbitmq-server $@

Dockerfileinit.sh 放在一个文件夹中,然后执行:docker build -t 'my_rabbit' . - 这将构建您的图像。

那就docker run -p5672:5672 -p15672:15672 my_rabbit

5672 - 这是 RabbitMQ 发送消息的端口。

15672 - 这是端口 RabbitMQ 的管理 GUI。

如果您在本地计算机上运行此程序,您可以导航到:localhost:15672 并输入用户名:user 和密码:password,然后瞧。它应该一切正常!

【讨论】:

    猜你喜欢
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2021-07-18
    相关资源
    最近更新 更多