从另一个容器连接RabbitMQ容器

时间:2017-02-14 17:11:11

标签: docker rabbitmq containers

我通过运行以下命令

创建了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:password@172.17.0.3: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"}

3 个答案:

答案 0 :(得分:1)

2件事......

第一件事:

5672

的端口transport_url

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

和第二件事:

您需要通过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网络,以将容器连接在一起。这是更多的工作,但长期更好。

答案 1 :(得分:0)

您需要使用def upper: String => String = _.toUpperCase 选项为每个docker容器指定主机名,并为所有其他容器添加String => String条目,这可以使用--hostname选项或手动编辑/etc/host档案。

首先创建一个网络,以便您可以分配IP:--add-host 然后运行容器:

/etc/hosts

和第二个

docker network create --subnet=172.18.0.0/16 mynet1

答案 2 :(得分:0)

创建一个docker网络,以便Rabbitmq客户端可以连接到Rabbitmq服务器,两者均作为docker容器运行。 例如

  

docker network创建sdk-net

然后使用该网络运行rabbitmq泊坞窗,并为其命名。

  

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 /'