【问题标题】:Trouble deploying docker on AWS with ecs-cli使用 ecs-cli 在 AWS 上部署 docker 时遇到问题
【发布时间】:2016-11-06 14:40:41
【问题描述】:

我在 ECS 上有一个 repo,使用 ecs-cli 创建了一个集群

ecs-cli configure --region=us-west-2 --profile=<MY PROFILE> --cluster=cluster-1

ecs-cli up --capability-iam --keypair=<MY KEYPAIR>

但是接下来执行撰写文件的步骤是当它失败时

ecs-cli compose --file docker-compose.yml --project-name drafter-project service up

这是我的 docker-compose.yml 文件:

version: '2'
services:
  rabbit:
    image: rabbitmq
    hostname: rabbit1
    ports:
       - 5672:5672
       - 15672:15672
  drafter:
    build: .
    depends_on: 
      - rabbit

我在这里遇到的错误是:

Error registering task definition 
error=ClientException: Container.image should not be null or empty.
Create task definition failed 
error=ClientException: Container.image should not be null or empty.

我不确定任务定义是什么或它需要什么。

【问题讨论】:

  • 注意 ecs-cli compose 和 docker compose 并不相同,因此您应该仔细检查 ecs 和 yaml 文件的语法。 (健全性检查 - 我假设您的配置文件确实以 .yaml 结尾?)
  • 服务和任务是 ecs 的重要组成部分。您应该能够在 ecs 服务上找到相同的文档。 ecs-cli compose 应该为您创建任务和定义。从看起来像 ecs 的错误来看,发现容器映像为空。你可以添加你的 docker compose yml 吗?注意:ECS cli compose 不支持 compose 版本 2,只支持 docker compose 1 命令的子集。这是文档:docs.aws.amazon.com/AmazonECS/latest/developerguide/…
  • docs.docker.com/compose/compose-file/#versioning 有版本 1 的文档和示例
  • 在执行 CLI 命令之前构建并上传图像到 ecr。没有其他选择。您可以使用 ECR 或 docker hub 来托管图像。
  • @Shibashis 那么,没有办法在本地构建您的图像并告诉 ecs-cli 从那里拉取它们吗?

标签: amazon-web-services docker docker-compose amazon-ecs


【解决方案1】:

据我了解,ecs-cli 对完整的 Docker Compose 文件语法的支持非常有限。例如,您应该会看到有关 WARN[0000] Skipping unsupported YAML option for service... option name=build service name drafter 的警告

原因是您使用的 ecs-cli 版本期望所有服务都是图像。因此,drafter 需要一个图像,您可以通过docker build 或传统的docker-compose 调用生成该图像(但是您需要维护两个版本的撰写文件——传统版本和与 ecs 兼容的版本。

注意:听起来他们可能计划在未来支持build,至少根据我之前看到的一个 github 评论(抱歉,已经关闭标签,所以无法链接到它)。

【讨论】:

  • 那么解决办法是什么?我该怎么办?
  • @Dror -- 我放弃了尝试使用 ECS,所以我的知识有限,我不确定 ecs-cli 自从我发帖后是否已更改,但如果没有t,我相信您只需在本地(无需 AWS 工具)为您计划的容器创建映像,然后相应地使用它们。
  • 我还集中手动设置安装了 docker 的 EC2 节点并从那里获取
  • 您可能想查看 Google Compute Engine,它可能有更好的 Compose 支持。再说一次,只是猜测,我还没有尝试过。
【解决方案2】:

问题出在您的撰写文件中:

drafter:
    build: .

那不行,你应该先构建并推送镜像:

docker build -t drafter .
docker tag drafter:latest somepath.amazonaws.com/drafter:latest
docker push somepath.amazonaws.com/drafter:latest

然后做:

drafter:
    image: somepath.amazonaws.com/drafter:latest

请注意,latest 也可能是一个版本。

【讨论】:

  • 我试过这个,但还是没能成功。见question
猜你喜欢
  • 2021-01-24
  • 2017-09-30
  • 2018-03-03
  • 2020-12-30
  • 2017-12-30
  • 2019-09-10
  • 2020-12-13
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多