如果图像存在,docker可以构build跳过构build吗?

是否有可能运行docker-compose up只有在图像不存在于存储库时才会构build?

我正在testing将在两种不同的环境中运行的testing场景:作为testing自动化的一部分,在笔记本电脑上和服务器上运行。 我的docker-compose文件看起来像这样:

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

如果我在本地运行它本地回购目录存在它运行良好。 如果我尝试在服务器上运行它,而不是从docker仓库中取出,它会抱怨找不到构buildpath。 如果我拿出build属性,它在服务器上运行良好,但它不会在本地运行,除非我预先生成的图像。

有没有办法让它只尝试构build,如果图像不存在? 如果没有,我可以尝试一些解决方法,但我宁愿只使用一个处理每个案件的docker-compose文件。

您可以使用docker-compose pull来获取图像。 那么如果它们已经存在,Compose将不会再尝试构build它们。

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

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

你真正的问题是你指定了一个构build上下文,但是然后尝试使用docker-compose而没有构build上下文。

当docker-compose运行时, 即使它没有计划进行构build ,它也会validation构build上下文是否至less存在。 如果没有,那就会失败。

所有你需要做的,以满足这个要求是为任何缺less的构build上下文创build一个空目录。 这应该使docker组成足够快乐的运行。

 mkdir local-repo1 local-repo2