使用 docker-compose 构建 docker 镜像,如果它们不存在于 docker 存储库中

时间:2021-06-24 14:34:43

标签: docker docker-compose docker-registry

我想要做的是,如果私有 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 镜像的引用。

2 个答案:

答案 0 :(得分:0)

您不能在 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

答案 1 :(得分:0)

我最终使用了 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在本地构建