一尘不染

如果映像存在,泊坞窗可以跳过构建吗?

docker

是否有可能以docker-compose up仅在存储库中不存在映像的情况下才能构建的方式运行?

我正在研究一种将在两种不同环境中运行的测试方案:本地在笔记本电脑上,以及在服务器上作为测试自动化的一部分。我的docker-compose文件看起来像这样:

services:
  my-service1:
    build: "./local-repo1"
    image: "image1"
  my-service2:
    build: "./local-repo2"
    image: "image2"
  ...

如果我在本地存储目录所在的本地运行,则运行良好。如果我尝试在从docker存储库中提取的服务器上运行它,则会抱怨找不到构建路径。如果我删除该build属性,则它可以在服务器上正常运行,但是除非事先构建映像,否则它不会在本地运行。

有没有办法让它仅在映像不存在的情况下尝试构建?如果不是,我可以尝试一些解决方法,但是我更喜欢只使用一个处理每种情况的docker-compose文件。


阅读 232

收藏
2020-06-17

共1个答案

一尘不染

您可以docker-compose pull用来获取图像。然后,如果它们已经存在,则Compose不会尝试再次构建它们。

要确保避免重建,可以使用--no-build

docker-compose pull
docker-compose up -d --no-build

真正的问题是您要指定构建上下文,但是随后尝试在不存在该构建上下文的情况下使用docker-compose。

当docker-compose运行时, 即使它没有计划进行构建 ,它也会验证构建上下文至少存在。如果没有,它将失败。

满足此要求所需要做的就是为任何缺少的构建上下文创建一个空目录。那应该使docker-compose足够快乐地运行。

mkdir -p local-repo1 local-repo2
2020-06-17