是否可以以这样的方式运行docker-compose up
,只有在图像不存在于存储库中时才会构建它?
我正在研究将在两个不同环境中运行的测试场景:笔记本电脑本地测试,以及作为测试自动化一部分的服务器。我的docker-compose文件看起来像这样:
services:
my-service1:
build: "./local-repo1"
image: "image1"
my-service2:
build: "./local-repo2"
image: "image2"
...
如果我在local-repo目录存在的本地运行它运行正常。如果我尝试在服务器上运行它,而不是从docker存储库中提取它,它会抱怨它无法找到构建路径。如果我取出build
属性,它在服务器上运行正常,但除非我事先构建图像,否则它不会在本地运行。
如果图像不存在,有没有办法让它只尝试构建?如果不是,我可以尝试一些解决方法,但我更喜欢只使用一个处理每个案例的docker-compose文件。
答案 0 :(得分:9)
您可以使用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
答案 1 :(得分:1)