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

时间:2017-06-22 17:02:26

标签: docker deployment docker-compose

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

当我更改我的代码并想要重建码头工具时,我使用

docker-compose stop
docker-compose build

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

docker-compose up

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

3 个答案:

答案 0 :(得分:4)

我有一个辅助功能来核实所有东西,以便我们可以连续测试,持续...基本上归结为以下几点:

清除容器:

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

清除图像:

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

清除卷:

docker volume rm $(docker volume ls -q)

清除网络:

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

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

marcelmfs并借用Source

答案 1 :(得分:2)

您可以使用docker-compose up --builddocker-compose up --build --force-recreate

答案 2 :(得分:1)

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

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

以上顺序并非巧合 - 当第一条指令构建图像时,旧图像正在运行 - 但是当构建完成时,旧容器将被新构建的容器停止,删除和交换。

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

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