【问题标题】:Docker compose won't push to ECRDocker compose 不会推送到 ECR
【发布时间】:2021-11-04 00:49:13
【问题描述】:

我正在尝试在 docker compose up 命令上设置部署,它将构建必要的映像,将它们推送到 ECR 并在 ECS 上启动所有内容。

到目前为止我做了什么。

  1. 已创建并切换到 aws 上下文:
docker context create ecs aws
docker context use aws
  1. 已创建docker-compose.yml 文件:
version: '3.9'
services:
  frontend:
    build: ./frontend
    image: <my_aws_id>.dkr.ecr.<region>.amazonaws.com/frontend:latest
  backend:
    build: ./backend
    image: <my_aws_id>.dkr.ecr.<region>.amazonaws.com/backend:latest
  nginx:
    build: ./nginx
    image: <my_aws_id>.dkr.ecr.<region>.amazonaws.com/nginx:latest
    ports:
      - 80:80

看了一堆手册,据我了解,命令docker compose up应该:

  1. 构建映像
  2. 将它们推送到 ECR
  3. 在 ECS 上创建集群和必要的任务
  4. 启动容器

相反,我遇到错误,告诉我找不到这些图像。是的,我的 ECR 存储库是空的,但我希望 docker compose up 构建图像并将其推送到该存储库,而不仅仅是尝试从 ECR 获取它们。

我做错了什么?

【问题讨论】:

    标签: docker docker-compose amazon-ecs amazon-ecr


    【解决方案1】:

    该命令的目的是将服务up带到本地:

    ❯ docker-compose --help
      ...
      create             Create services
      push               Push service images
      start              Start services
      up                 Create and start containers
    

    根据上下文,它还可以构建和拉取图像,创建或更新容器,当然,启动服务,但它不会 push。如果你打算使用 docker-compose 来推送图片,我建议你手动运行构建和推送命令:

    docker-compose build
    docker-compose push
    

    【讨论】:

    • 感谢您的回答! docker-compose 有问题:The platform targeted with the current context is not supporteddocker compose 看起来没有 buildpush 命令,但是如果我切换到 default 上下文,我可以使用 docker compose build 命令构建。有点奇怪,我是不是应该用default上下文构建推送,然后切换到aws上下文为docker compose up??
    • 我怀疑您无法使用 ECS 构建,因为您在本地而不是在 ECS 上有构建文件。 push 也是如此,如果你在本地构建,你需要从本地机器推送,而不是从 ECS。因此,您需要在您的 ECR 中构建具有标准上下文 docker login 的内容(检查 AWS 文档,您只需执行一次),然后是 push。在那之后,我认为您应该能够使用您的 AWS 上下文来建立堆栈。
    【解决方案2】:

    docker compose 中的 ecs 上下文不允许构建/推送。到今天为止,您需要在上下文之间稍微跳舞,以实现您想要做的事情。 This 是一个示例(嵌入到完全不同的项目中),显示了该过程。

    简而言之(为了后代):

    export ACCOUNTNUMBER=<your account>
    export MYREGION=<your region>
    aws ecr get-login-password --region $MYREGION | docker login --password-stdin --username AWS $ECR_ECSWORKER_REPO_URI 
    docker context use default
    docker compose build
    docker compose push
    docker context use myecscontext
    docker compose up
    

    [以上假设myecscontext 上下文已经用docker context create ecs myecscontext 创建]

    【讨论】:

    • 非常感谢!这基本上就是我最终要做的,只是切换上下文。
    猜你喜欢
    • 1970-01-01
    • 2021-04-29
    • 2023-04-06
    • 2019-07-24
    • 2019-02-23
    • 1970-01-01
    • 2020-02-13
    • 2018-09-14
    • 1970-01-01
    相关资源
    最近更新 更多