如果图像存在,docker会编译跳过构建吗?

kal*_*one 8 docker docker-compose

是否可以以docker-compose up这样的方式运行,即只有在存储库中不存在图像时才会构建?

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

services:
  my-service1:
    build: "./local-repo1"
    image: "image1"
  my-service2:
    build: "./local-repo2"
    image: "image2"
  ...
Run Code Online (Sandbox Code Playgroud)

如果我在local-repo目录存在的本地运行它运行正常.如果我尝试在服务器上运行它,而不是从docker存储库中提取它,它会抱怨它无法找到构建路径.如果我拿出build属性它在服务器上运行正常,但除非我事先构建图像,否则它不会在本地运行.

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

Dan*_*owe 11

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

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

docker-compose pull
docker-compose up -d --no-build
Run Code Online (Sandbox Code Playgroud)

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

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

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

mkdir -p local-repo1 local-repo2
Run Code Online (Sandbox Code Playgroud)


Amo*_*her 6

我正在使用 docker-compose v2.1

当我们运行 docker compose up 时,它会检查镜像是否存在。如果不存在,则仅构建该图像,否则它将跳过该部分

docker 撰写

version: '2.1'

services:
  devimage:
    image: nodedockertest
    build: .
    environment:
      NODE_ENV: development
    ports:
      - 8000:8000
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述