在 AWS Elastic Beanstalk 上部署时,无法通过图像名称引用与 docker 一起使用的 RabbitMQ
Not able to refer RabbitMQ used with docker by the image name when deployed on AWS Elastic Beanstalk
我的本地计算机上有一个 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 容器,其中使用了容器名称像 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 网络应用程序上的 URL,我应该如何访问部署在 AWS 实例上的 RabbitMQ 容器?
请帮忙!
如果您在 docker-compose.yml
部分的 web
部分添加如下内容会怎样?:
links:
- rabbitmq
并且在 Dockerrun.aws.json
中,在 celery_worker
和 web
下,您必须添加:
"links": [
"rabbitmq"
]
我的本地计算机上有一个 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 容器,其中使用了容器名称像 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 网络应用程序上的 URL,我应该如何访问部署在 AWS 实例上的 RabbitMQ 容器?
请帮忙!
如果您在 docker-compose.yml
部分的 web
部分添加如下内容会怎样?:
links:
- rabbitmq
并且在 Dockerrun.aws.json
中,在 celery_worker
和 web
下,您必须添加:
"links": [
"rabbitmq"
]