Mar*_*lul 21 rabbitmq celery docker
我想在一个docker容器中运行rabbitmq-server,并使用celery从另一个容器连接到它(http://celeryproject.org/)
我使用以下命令运行rabbitmq ...
sudo docker run -d -p :5672 markellul/rabbitmq /usr/sbin/rabbitmq-server
Run Code Online (Sandbox Code Playgroud)
并经过芹菜
sudo docker run -i -t markellul/celery /bin/bash
Run Code Online (Sandbox Code Playgroud)
当我尝试在http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html上执行非常基本的教程来验证连接时
我收到连接拒绝错误:
consumer:无法连接到amqp://guest@127.0.0.1:5672 //:[Errno 111]连接被拒绝.
当我在与芹菜相同的容器上安装rabbitmq时,它工作正常.
我需要做些什么才能让容器相互交互?
Alp*_*Alp 77
直接链接现已弃用.链接容器的新方法是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
Run Code Online (Sandbox Code Playgroud)
然后创建一个网络(最后一个参数是您的网络名称):
docker network create -d bridge --subnet 172.25.0.0/16 mynetwork
Run Code Online (Sandbox Code Playgroud)
将容器连接到新创建的网络:
docker network connect mynetwork rabbitmq
docker network connect mynetwork celery
Run Code Online (Sandbox Code Playgroud)
现在,两个容器都在同一个网络中,可以相互通信.
可以在使用网络:连接容器中找到非常详细的用户指南.
Docker 0.6.5中有一个名为链接的新功能,用于帮助docker容器之间的通信.
首先,像往常一样创建rabbitmq容器.请注意,我还使用了新的"名称"功能,使生活更轻松:
docker run --name rabbitmq -d -p :5672 markellul/rabbitmq /usr/sbin/rabbitmq-server
Run Code Online (Sandbox Code Playgroud)
您可以使用link参数映射容器(我们在这里使用名称,id也可以):
docker run --link rabbitmq:amq -i -t markellul/celery /bin/bash
Run Code Online (Sandbox Code Playgroud)
现在您可以访问rabbitmq容器的IP和端口,因为docker会自动添加一些环境变量:
$AMQ_PORT_5672_TCP_ADDR
$AMQ_PORT_5672_TCP_PORT
Run Code Online (Sandbox Code Playgroud)
此外,Docker将源容器的主机条目添加到/etc/hosts文件中.在此示例中,amq将是容器中已定义的主机.
从Docker 文档:
与/ etc/hosts文件中的主机条目不同,如果重新启动源容器,则不会自动更新存储在环境变量中的IP地址.我们建议使用/ etc/hosts中的主机条目来解析链接容器的IP地址.
只需获取容器ip,然后从另一个容器连接到它:
CONTAINER_IP=$(sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' $CONTAINER_ID)
echo $CONTAINER_IP
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25444 次 |
| 最近记录: |