在docker-compose构builddocker-compose之后,运行旧的未更新的容器

我使用docker-compose并find以下问题:

当我改变我的代码,并希望重build我使用的docker工人

docker-compose stop docker-compose build 

然后我想通过以下方式运行系统:

 docker-compose up 

但没有新版本的代码/容器运行,但旧的。 该怎么办?

我有一个辅助function来核实所有的东西,这样我们的连续等待,循环可以被testing,呃…不断地。 基本上归结为以下几点:

要清除容器:

 docker rm -f $(docker ps -a -q) 

要清除图像:

 docker rmi -f $(docker images -a -q) 

要清除卷:

 docker volume rm $(docker volume ls -q) 

清除networking:

 docker network rm $(docker network ls | tail -n+2 | awk '{if($2 !~ /bridge|none|host/){ print $1 }}') 

我通常不需要旧的容器,卷和networking,所以为了清除它们,我做了一个bash脚本,在每次构build之前运行它来清理docker环境。 而使用更新后的代码重builddocker,我使用docker-compose up --build

信贷给马塞尔夫斯克和从源头借来的

你可以使用docker-compose up --build或者docker-compose up --build --force-recreate

在这种情况下,首先我们应该删除旧的容器(由rm -f )。 所以我们可以通过以下方式部署新代

 docker-compose build docker-compose stop docker-compose rm -f docker-compose up 

上面的顺序并不是巧合 – 当第一个指令构build图像时,旧的图像正在运行 – 但是当build筑完成时,旧的容器被停止,删除,并由新build的一个交换。

我把上面的命令放在方便的复制粘贴oneliner:

docker-compose build && docker-compose stop && docker-compose rm -f && docker-compose up