rabbitmq - 从一个 Docker 容器连接到另一个

标签 rabbitmq celery docker

我想在一个 docker 容器中运行 rabbitmq-server 并使用 celery (http://celeryproject.org/) 从另一个容器连接到它

我使用以下命令运行 rabbitmq...

sudo docker run -d -p :5672 markellul/rabbitmq /usr/sbin/rabbitmq-server

并通过

运行 celery
sudo docker run -i -t markellul/celery /bin/bash

当我尝试做非常基本的教程来验证 http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html 上的连接时

我收到连接被拒绝错误:

consumer: Cannot connect to amqp://guest@127.0.0.1:5672//: [Errno 111] Connection refused.

当我将 rabbitmq 安装在与 celery 相同的容器上时,它工作正常。

我需要做什么才能让容器相互交互?

最佳答案

[编辑 2016]

直接链接现已弃用。做链接容器的新方法是docker network connect .它的工作原理与虚拟网络非常相似,并且比旧的链接方式具有更广泛的功能集。

首先创建命名容器:

docker run --name rabbitmq -d -p :5672 markellul/rabbitmq /usr/sbin/rabbitmq-server
docker run --name celery -it markellul/celery /bin/bash

然后你创建一个网络(最后一个参数是你的网络名称):

docker network create -d bridge --subnet 172.25.0.0/16 mynetwork

将容器连接到新创建的网络:

docker network connect mynetwork rabbitmq
docker network connect mynetwork celery

现在,两个容器都在同一个网络中,可以相互通信了。

可以在 Work with networks: Connect containers 找到非常详细的用户指南.

[旧答案]

有一个new feature in Docker 0.6.5 called linking ,这是为了帮助 docker 容器之间的通信。

首先,像往常一样创建您的 rabbitmq 容器。请注意,我还使用了新的“名称”功能,这让生活变得更轻松了一点:

docker run --name rabbitmq -d -p :5672 markellul/rabbitmq /usr/sbin/rabbitmq-server

你可以使用link参数来映射一个容器(我们这里用名字,id也可以):

docker run --link rabbitmq:amq -i -t markellul/celery /bin/bash

现在你可以访问rabbitmq容器的IP和Port,因为docker自动添加了一些环境变量:

$AMQ_PORT_5672_TCP_ADDR
$AMQ_PORT_5672_TCP_PORT

此外,Docker 将源容器的主机条目添加到 /etc/hosts 文件中。在此示例中,amq 将是容器中定义的主机。
来自 Docker documentation :

Unlike host entries in the /etc/hosts file, IP addresses stored in the environment variables are not automatically updated if the source container is restarted. We recommend using the host entries in /etc/hosts to resolve the IP address of linked containers.

关于rabbitmq - 从一个 Docker 容器连接到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18460016/

相关文章:

python - Celery 结果后端 HTML 和 JSON

postgresql - 移动默认的 docker postgres 数据卷

python - 奇怪的 Docker + Celery Bug

node.js - 在 node-amqp (node.js) 中处理独占队列订阅时出错

redis - 收到错误接收到类型为 'mytasks.add' 的未注册任务

rabbitmq - 到 RabbitMQ 队列的第一条消息导致 channel 关闭

python - Flask + uWSGI + Celery - 如何将 Celery 作为守护进程启动

windows - Golang Docker容器无法在Windows Home上启动

c# - RabbitMQ,REST API,Docker和Kubernete最佳实践问题

环境变量中的RabbitMQ日志和Mnesia位置没有反射(reflect)?