使用 docker-compose 构建 docker 图像(如果它们不存在于 docker 存储库中)

Building docker images if they don't exists on docker repository with docker-compose

我想做的是,如果图像不在私有 docker 存储库中,则使用 docker-compose 从源代码构建该图像。

例如

version: '3.4'
  webapp:
    image: private_ecr_repo.amazonecr.com/webapp:latest
    build:
      context: "."

因此,当 private_ecr_repo 上不存在图像时,我希望从本地源构建它。

PS:我看过 docker-compose build --pull docker-compose up --no-build,但它们没有我想要的行为。

根据文档,当图像属性与 docker-compose 文件中的构建上下文一起使用时,图像属性值表示构建图像的标签。当未提及构建上下文时,image 属性将作为从中提取 docker 图像的参考。

您不能有条件地在 docker-compose 文件中设置内容,但您可以使用 compose profiles

version: '3.4'
  services:
    webapp:
      image: private_ecr_repo.amazonecr.com/webapp:latest
      profiles:
        - build
    webappbuild:
    build:
      context: "."
    profiles:
      - pull

那么你可以docker-compose --profile pull updocker-compose --profiles build up

我最终使用了 docker compose 的覆盖配置功能并默认为 ecr 图像

docker-compose.yml

version: '3.4'
  webapp:
    image: private_ecr_repo.amazonecr.com/webapp:latest

当我想构建本地图像时,我会指定多个 docker-compose 文件

docker-compose.local.yml

version: '3.4'
  webapp:
    build:
      context: "."

使用命令 docker-compose -f docker-compose.yml -f docker-compose.local.yml

第二个文件添加构建上下文并导致 docker-compose 在本地构建