【问题标题】:Not able to refer RabbitMQ used with docker by the image name when deployed on AWS Elastic Beanstalk在 AWS Elastic Beanstalk 上部署时,无法通过映像名称引用与 docker 一起使用的 RabbitMQ
【发布时间】: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


    【解决方案1】:

    如果您在docker-compose.ymlweb 部分下添加类似这样的内容会怎样?:

    links:
      - rabbitmq
    

    Dockerrun.aws.json 中,在celery_workerweb 下,您必须添加:

    "links": [
       "rabbitmq"
    ]
    

    【讨论】:

      猜你喜欢
      • 2015-02-23
      • 2016-10-16
      • 2016-06-19
      • 2020-06-23
      • 2017-12-05
      • 1970-01-01
      • 2016-10-27
      • 2014-07-24
      • 2020-07-03
      相关资源
      最近更新 更多