【发布时间】:2020-11-14 09:50:48
【问题描述】:
我的本地机器上有一个docker-compose.yml 文件:
version: '3'
services:
web: &my_web_app
build: .
command: gunicorn MyApp.wsgi --workers 3
ports:
- "80:8000"
depends_on:
- rabbitmq
rabbitmq:
image: rabbitmq:management
celery_worker:
<<: *my_web_app
command: celery -A MyApp worker --autoscale=10,1 --loglevel=info
ports: []
depends_on:
- rabbitmq
后来,我将名为 web 的 docker 镜像上传到名为 myName/web:latest 的 docker 注册表中。之后,我创建了一个Dockerrun.aws.json,如下:
{
"AWSEBDockerrunVersion": 2,
"Authentication": {
"Bucket": "cred-keeper",
"Key": "index.docker.io/.dockercfg"
},
"containerDefinitions": [{
"Authentication": {
"Bucket": "cred-keeper",
"Key": "index.docker.io/.dockercfg"
},
"command": [
"celery",
"-A",
"MyApp",
"worker",
"--autoscale=10,1",
"--loglevel=info"
],
"essential": true,
"image": "myName/web:latest",
"name": "celery_worker",
"memory": 175
},
{
"essential": true,
"image": "rabbitmq:management",
"name": "rabbitmq",
"memory": 175,
"portMappings": [{
"containerPort": 5672,
"protocol": "tcp",
"hostPort": 5672
}]
},
{
"Authentication": {
"Bucket": "cred-keeper",
"Key": "index.docker.io/.dockercfg"
},
"command": [
"gunicorn",
"MyApp.wsgi",
"--workers",
"4"
],
"essential": true,
"image": "myName/web:latest",
"memory": 256,
"name": "web",
"portMappings": [{
"containerPort": 8000,
"hostPort": 80
}]
}
],
"family": "",
"volumes": []
}
名为web 的图像是一个 Django(Python 的 Web 框架)应用程序,我曾经使用一个 URL 访问我的 RabbitMQ 容器,该 URL 使用了应用程序中的容器名称,例如 amqp://rabbitmq:5672我曾经在本地机器上运行它。
但是,当我使用 Dockerrun.aws.json 将其部署到 AWS Elastic Beanstalk 时,我的 celery 容器的日志中出现了错误,例如 [2020-07-24 08:29:51,709: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@rabbitmq:5672//: failed to resolve broker hostname。
为什么我无法通过 URL 中容器图像的名称访问 AWS 上的 RabbitMQ,就像它在我的本地计算机上工作一样?如果不使用 amqp://rabbitmq:5672 作为我的 Django Web 应用程序上的 URL,我应该如何访问部署在 AWS 实例上的 RabbitMQ 容器?
请帮忙!
【问题讨论】:
标签: django amazon-web-services docker rabbitmq celery