我正在尝试创建一个Docker设置(使用docker-组合)来测试我的Python应用程序之一。and启动Postgres、Redis服务器和PhantomJS服务器,然后使用pytest运行测试。
这就是我的test.sh的样子:
#!/bin/bash
UP=$(docker-compose up -d redis postgres phantomjs 2>&1)
echo $UP
if [[ $UP == *"Starting radar_postgres"* ]]; then
echo "Sleeping 10 seconds to wait for PostgreSQL server..."
sleep 10
fi
docker-compose build tests && \
docker-compose run \
--rm \
-e GOOGLE_OAUTH2_CLIENT_ID='$GOOGLE_OAUTH2_CLIENT_ID' \
-e GOOGLE_OAUTH2_CLIENT_SECRET='$GOOGLE_OAUTH2_CLIENT_SECRET' \
-e GOOGLE_DEVELOPER_TOKEN='$GOOGLE_DEVELOPER_TOKEN' \
tests $@首先启动依赖项。由于docker-compose up的工作方式,它们在必要时会自动重建。
然后,我在我的tests容器中运行一个一次性的工作。我使用一次性作业,而不是使用docker-compose up,因为这样我可以将参数传递给测试框架。
问题是容器总是被重建,即使Dockerfile没有改变,也不需要重新构建。(当然,每个步骤都使用缓存,但仍然需要4-5秒。)相反,如果我离开了docker-compose build行,那么当我更改Dockerfile时,容器就不会被重建。
是否只有在必要时才能重建图像?
发布于 2015-10-21 07:01:18
请注意,有一个讨论(第1455期)可以从docker中删除构建。
撰写的主要工作是编排而不是建筑,而码头形象是绘制这条线的自然之地。
因此,最好使用docker build命令(只在必要时构建映像),而不是使用docker-compose build (可能构建得太过激进)。
https://stackoverflow.com/questions/33252352
复制相似问题