我在本地机器上有一个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框架)应用程序,我过去常常使用amqp://rabbitmq:5672等应用程序中使用容器名称的URL来访问我的RabbitMQ容器,当我在本地机器上运行它时,它工作得非常好。
但是,当我使用Dockerrun.aws.json将它部署到AWS Elastic Beanstalk时,我在我的芹菜容器的日志中得到了一个错误,比如[2020-07-24 08:29:51,709: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@rabbitmq:5672//: failed to resolve broker hostname。
为什么我不能通过URL中容器图像的名称访问亚马逊网络服务上的RabbitMQ,就像它在我的本地机器上工作一样?如果不使用amqp://rabbitmq:5672作为我的Django web应用程序的网址,我应该如何访问部署在亚马逊网络服务实例上的RabbitMQ容器?
请帮帮我!
发布于 2020-07-25 02:17:03
如果您在web部分的docker-compose.yml中添加如下内容:
links:
- rabbitmq在Dockerrun.aws.json中,在celery_worker和web下,您必须添加:
"links": [
"rabbitmq"
]https://stackoverflow.com/questions/63075106
复制相似问题