使用docker composer在AWS beanstalk上部署docker

问题描述 投票:11回答:6

我正在尝试在AWS beanstalk上部署多个node.js微服务,我希望它们部署在同一个实例上。这是我第一次部署多项服务,所以有些失败我需要有人来帮助我。所以,我首先尝试将它们打包到docker容器中。同时我正在使用docker composer来管理结构。它在我的虚拟机中启动并运行,但是当我将它部署到beanstalk时,我遇到了一些问题。

我知道的:

  1. 我知道我必须选择部署为多容器泊坞机。
  2. 管理多个node.js服务的最佳实践是使用docker composer。
  3. 我需要一个用于node.js应用程序的dockerrun.aws.json
  4. 我需要为该ecs实例创建任务定义。

哪里有问题:

  1. 我只能找到php的dockerrun.aws.jsontask_definition.json模板,所以我无法验证我在这两个json文件中对node.js的配置是否正确。
  2. 似乎docker-compose.ymldockerrun.aws.jsontask_definition.json正在做类似的工作。我必须保持task_definition,但是我还需要dockerrun.aws.json吗?
  3. 我试图在ecs中运行任务,但它立即停止了。如何查看日志以查找任务?

我有:

在环境中找不到ecs任务定义(或空定义文件)

因为我的任务将永远停止。如果我可以查看日志,我会更容易进行故障排除。

这是我的task_definition.json

{
  "requiresAttributes": [],
  "taskDefinitionArn": "arn:aws:ecs:us-east-1:231440562752:task-definition/ComposerExample:1",
  "status": "ACTIVE",
  "revision": 1,
  "containerDefinitions": [
    {
      "volumesFrom": [],
      "memory": 100,
      "extraHosts": null,
      "dnsServers": null,
      "disableNetworking": null,
      "dnsSearchDomains": null,
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80,
          "protocol": "tcp"
        }
      ],
      "hostname": null,
      "essential": true,
      "entryPoint": null,
      "mountPoints": [
        {
          "containerPath": "/usr/share/nginx/html",
          "sourceVolume": "webdata",
          "readOnly": true
        }
      ],
      "name": "nginxexpressredisnodemon_nginx_1",
      "ulimits": null,
      "dockerSecurityOptions": null,
      "environment": [],
      "links": null,
      "workingDirectory": null,
      "readonlyRootFilesystem": null,
      "image": "nginxexpressredisnodemon_nginx",
      "command": null,
      "user": null,
      "dockerLabels": null,
      "logConfiguration": null,
      "cpu": 99,
      "privileged": null
    }
  ],
  "volumes": [
    {
      "host": {
        "sourcePath": "/ecs/webdata"
      },
      "name": "webdata"
    }
  ],
  "family": "ComposerExample"
}
amazon-web-services docker elastic-beanstalk docker-compose amazon-ecs
6个回答
8
投票

我有一个类似的问题,结果我直接在Archive.zip文件中存档包含文件夹,从而在Archive.zip文件中给我这个结构:

RootFolder
    - Dockerrun.aws.json
    - Other files...

事实证明,通过仅归档RootFolder的内容(而不是文件夹本身),Amazon Beanstalk识别出ECS任务定义文件。

希望这可以帮助。


1
投票

类似的问题。为我修复的是使用CLI工具而不是自己压缩,只需运行eb deploy就可以了。


1
投票

对我来说,这只是一个确保文件名称与AWS documentation中描述的确切外壳匹配的情况。

dockerfile.aws.json必须是Dockerfile.aws.json


0
投票

对我来说,codecommit是没有的。然后在git中添加Dockerrun.aws.json之后就可以了。


0
投票

由于错误,我到了这里。我的问题是我使用以下标签进行部署:

eb deploy --label MY_LABEL

您需要做的是使用'进行部署:

eb deploy --label 'MY_LABEL'

0
投票

我也遇到过这个问题。对我来说问题是没有在git中添加Dockerrun.aws.json。 eb deploy检测到git的存在。

我跑eb deploy --verbose想出这个:

INFO: Getting version label from git with git-describe
INFO: creating zip using git archive HEAD

它进一步列出了所有进入zip的文件,Dockerrun.aws.json不存在。

git status报道:

On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    Dockerrun.aws.json

nothing added to commit but untracked files present (use "git add" to track)

将文件添加到git并提交有帮助。在我的具体情况下,我可以删除脚本部署中的.git目录。

© www.soinside.com 2019 - 2024. All rights reserved.