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

问题描述 投票:0回答:4

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

当我更改代码并想要重建我使用的docker时

docker-compose stop
docker-compose build

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

docker-compose up

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

docker deployment docker-compose
4个回答
5
投票

您可以使用,

docker-compose up --build
docker-compose up --build --force-recreate


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并借自来源


3
投票

在这种情况下,我们首先应该删除旧容器(通过

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


0
投票

我知道这个问题提出已经7年了,但这是我找到的解决方案:

docker pull <YOUR_LOGIN_TO_DOCKER_HUB>/<NAME_OF_THE_REPO>:latest
docker-compose stop
docker-compose build
docker-compose up

因此,我们首先使用最新版本更新图像(图像 ID),然后才尝试构建和启动应用程序。

速记:

docker pull <YOUR_LOGIN_TO_DOCKER_HUB>/<NAME_OF_THE_REPO>:latest
docker compose up -d --build --remove-orphans

--remove-orphans
如果旧容器仍保留,则需要将其移除。

© www.soinside.com 2019 - 2024. All rights reserved.