我通过运行以下命令创建了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"}
2件事......
这是5672
的transport_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网络,以将容器连接在一起。这是更多的工作,但长期更好。
您需要使用--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
创建一个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 /'