从另一个容器连接RabbitMQ容器

问题描述 投票:2回答:3

我通过运行以下命令创建了rabbitmq容器

docker run -d --hostname My-rabbit --name test-rabbit -p 15672:15672 rabbitmq:3-management

创建了一个名为userrabbit的用户并获得了如下权限

rabbitmqctl add_user userrabbit password
rabbitmqctl set_user_tags userrabbit administrator
rabbitmqctl set_permissions -p / userrabbit ".*" ".*" ".*"

这个(测试兔子)的IP是172.17.0.3

我创建了一个容器(172.17.0.4),其中我的应用程序正在运行,我需要提供rabbitmq的url,我已经提供了以下url

transport_url = rabbit://userrabbit:[email protected]:15672/

在容器(172.17.0.4)的日志中,它显示为

AMQP server 172.17.0.3:15672 closed the connection. Check login credentials: Socket closed

但我能够使用与下面所示相同的凭据从容器(172.17.0.4)ping RabbitMq

curl -i -u userrabbit:password http://172.17.0.3:15672/api/whoami
HTTP/1.1 200 OK
vary: Accept-Encoding, origin
Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact)
Date: Tue, 14 Feb 2017 17:06:39 GMT
Content-Type: application/json
Content-Length: 45
Cache-Control: no-cache

{"name":"userrabbit","tags":"administrator"}
docker rabbitmq containers
3个回答
1
投票

2件事......

第一件事:

这是5672transport_url港口

您列出的15672端口是Web管理控制台

第二件事:

您需要通过docker网络将容器联网。

最简单的方法是使用--link选项,在run时间提供给第二个容器。

docker run --link test-rabbit:test-rabbit (... other options here)

通过添加--link test-rabbit:test-rabbit选项,您的应用程序将能够将test-rabbit视为具有IP地址的有效网络名称。

更新您的运输网址

通过这两个修复,你的transport_url就变成了这个

transport_url = rabbit://userrabbit:password@test-rabbit:5672/

其他网络选项

使用--link是最简单的启动方式,但不是很可扩展。

docker-compose使得在容器之间添加链接变得非常容易

您还可以通过命令行工具和docker-compose创建自定义docker网络,以将容器连接在一起。这是更多的工作,但长期更好。


0
投票

您需要使用--hostname选项为每个docker容器指定主机名,并为所有其他容器添加/etc/host条目,这可以使用--add-host选项或手动编辑/etc/hosts文件。

首先创建一个网络,以便您可以分配IP:docker network create --subnet=172.18.0.0/16 mynet1然后运行容器:

docker run -d --net mynet1 --ip 172.18.0.11 --hostname rab1 --add-host rab2:172.18.0.12 --name rab1con -p 15672:15672 rabbitmq:3-management

第二个

docker run -d --net mynet1 --ip 172.18.0.12 --hostname rab2 --add-host rab1:172.18.0.11 --name rab2con -p 15673:15672 rabbitmq:3-management

0
投票

创建一个docker网络,以便rabbitmq客户端可以连接到rabbitmq服务器,两者都作为docker容器运行。防爆

docker network创建sdk-net

然后使用该网络运行rabbitmq docker并为其命名

docker run -d --rm --name demo-rabbit --net sdk-net -p 5672:5672 -p 15672:15672 rabbitmq:3.6.15-management-alpine

像你一样运行客户端(注意运行命令sdk-net中的网络名称

docker run --rm -p 8090:8090 --net sdk-net pythontest

在您的客户端中,可以访问Docker容器的名称。所以AMQ连接字符串会变得像

amqp_url ='amqp:// demo-rabbit:5672 /'

© www.soinside.com 2019 - 2024. All rights reserved.