我使用docker-compose并发现以下问题:
当我更改我的代码并想要重建码头工具时,我使用
docker-compose stop
docker-compose build
然后我想通过以下方式运行系统:
docker-compose up
但是没有运行新版本的代码/容器而是旧版本。怎么办?
答案 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
答案 1 :(得分:2)
您可以使用docker-compose up --build
或docker-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