停止并重建正在运行的 docker compose 堆栈中的单个服务

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

我有一个

docker-compose.yaml
文件,其中包含构成应用程序的一堆服务:

services:
  mongo:
  redis:
  rabbitmq:
  typesense:
  app-01:
  app-02:
  app-lb:

这里

app-lb
haproxy
集装箱负载均衡
app-01
app-02

我的想法是我可以阻止其中任何一个,构建并提出。然后对另一台进行同样的操作,无需任何停机时间。

docker compose stop app-01
docker compose build app-01
docker compose start app-01

但这不起作用,它只会启动旧容器。

构建后我可以执行

docker compose up
,但这也会重新启动/重新创建所有其他服务,从而导致停机。

这可能吗?

docker docker-compose
1个回答
0
投票

你应该能够

docker compose build app-01
docker compose up -d

即使容器正在运行旧映像,您也始终可以构建新映像。旧映像将保持可用,直到手动删除为止,并且只要它有正在运行的容器就无法删除。

docker compose up
将查看所有容器定义并将它们与正在运行的容器进行比较。如果任何容器的设置发生更改,这些容器将被删除并重新创建(这是正常做法,容器本身不应该重要)。

您应该很少需要

docker compose stop
start
。这些会使容器进入异常状态,其中容器存在但未运行进程。
docker compose start
(和
docker start
)在现有容器中重新启动进程;这可能会导致问题,因为容器文件系统不会处于“干净”状态。在您的特定设置中,由于它重用现有容器,因此它也将重用现有(旧)图像。

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