通过docker compose仅更新一个容器

通过docker compose仅更新一个容器,docker,docker-compose,Docker,Docker Compose,假设我有一个docker-compose.yml文件,其中包含五个应用程序&我通过docker-compose-up-d启动了它们,现在有一个我想要使用的可用应用程序的更新。所以我拉了这张新照片。。。如何停止这一个旧容器而不停止另外四个容器 使用docker-compose-down和&docker-compose-up-d将停止并重新启动我的所有容器,所以这是错误的 使用docker stop app_1和&docker run app_1会起作用,但对我来说似乎“错误”,因为它不是dock

假设我有一个docker-compose.yml文件,其中包含五个应用程序&我通过
docker-compose-up-d
启动了它们,现在有一个我想要使用的可用应用程序的更新。所以我拉了这张新照片。。。如何停止这一个旧容器而不停止另外四个容器

  • 使用
    docker-compose-down和&docker-compose-up-d将停止并重新启动我的所有容器,所以这是错误的
  • 使用
    docker stop app_1和&docker run app_1
    会起作用,但对我来说似乎“错误”,因为它不是
    docker compose
    命令

那么“docker方法”是什么呢?

只需再次运行
docker compose up-d
(之前不运行
down
/
停止
/
杀死

初始
docker compose.yml

version: "2"

services:
  db1:
    command: mongod
    image: mongo:3.2.4
    ports:
      - "27020:27017"

  db2:
    command: mongod
    image: mongo:3.2.4
    ports:
      - "27021:27017"
更新db2

version: "2"

services:
  db1:
    command: mongod
    image: mongo:3.2.4
    ports:
      - "27020:27017"

  db2:
    command: mongod
    image: mongo:3.2.6
    ports:
      - "27021:27017"
再次运行
docker compose up-d

Pulling db2 (mongo:3.2.6)...
3.2.6: Pulling from library/mongo
47994b92ab73: Pull complete
a3ed95caeb02: Pull complete
71b6becd9768: Pull complete
7d5d40f9dc7b: Pull complete
9dc152e647de: Pull complete
3f1f69340f17: Pull complete
82a29b50f1d2: Pull complete
97869c61a050: Pull complete
50aa2bf3bccc: Pull complete
03913f2c5b05: Pull complete
Digest: sha256:29ee114c0ce96494553cd72f18d92935b36778b77bce167fc9962e442d8c7647
Status: Downloaded newer image for mongo:3.2.6
composetest_db1_1 is up-to-date
Recreating composetest_db2_1 

输出的最后两行显示了预期的行为

这是一个很老的问题,但如果docker hub上的图像已更改,并且我们没有更改docker文件,则答案似乎不起作用。例如,如果我在上面的示例中使用的是最新版本的mongo(mongo:latest),并且docker hub中的“latest”标记从3.2.4移动到3.2.6,就我所见,它不是通过运行
docker compose up-d
来实现的…

有一个用例,其中接受的答案不起作用:

假设您有4个容器,其中2个有新版本,您只想更新/重新启动其中一个

如果您只需再次执行
docker compose up-d
,这将更新两个容器

如果只想针对一个特定容器,可以分两步执行:

  • 拉动所有更新:
    docker compose Pull
    (这将只下载图像,不做任何其他操作)
  • 然后只更新你想要的容器:
    docker compose up-d——没有你的容器的deps name\u

--无dep对于避免错误地重新启动更新容器的依赖项非常重要。

非常感谢您的详细回答,这很有帮助!