网站搜索

停止 Docker 容器:单个、多个或全部


本 docker 教程讨论了同时停止单个 docker 容器、多个 docker 容器或所有正在运行的 docker 容器的方法。您还将学习如何优雅地停止 docker 容器。

本 docker 教程讨论了同时停止单个 docker 容器、多个 docker 容器或所有正在运行的 docker 容器的方法。您还将学习如何优雅地停止 Docker 容器。

要停止 docker 容器,您所需要做的就是按以下方式使用容器 ID 或容器名称:

docker stop container_ID_or_name

您还可以使用 dockercontainerstopcontainer_id_or_name 命令,但这是命令中的一个附加词,它不会提供任何额外的好处,因此请坚持使用 dockerstop。

但是,您应该了解更多有关停止 docker 容器的信息,特别是如果您是 Docker 初学者。

停止 docker 容器的实际示例

我将在本教程中讨论有关停止 docker 容器的各个方面:

  • 停止 Docker 容器

  • 一次停止多个 docker 容器

  • 停止具有特定镜像的所有 docker 容器

  • 立即停止所有正在运行的 docker 容器

  • 优雅地停止 docker 容器

在看到它之前,您应该知道如何获取容器名称或 ID。

您可以使用 docker ps 命令列出所有正在运行的 docker 容器。如果没有任何选项,docker ps 命令仅显示正在运行的容器。

abhishek@linux-console:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
1bcf775d8cc7        ubuntu              "bash"              8 minutes ago       Up About a minute                       container-2
94f92052f55f        debian              "bash"              10 minutes ago      Up 10 minutes                           container-1

输出还为您提供容器名称和容器 ID。您可以使用这两者之一来停止容器。

现在让我们开始停止容器。

1.停止docker容器

要停止特定容器,请在 docker stop 命令中使用其 ID 或名称:

docker stop container_name_or_ID

输出应该更具描述性,但它只显示您提供的容器名称或 ID:

abhishek@linux-console:~$ docker stop 1bcf775d8cc7
1bcf775d8cc7

您可以在已停止的容器上使用 docker stop 命令。它不会抛出任何错误或不同的输出。

您可以使用 docker ps -a 命令验证容器是否已停止。 -a 选项显示所有容器,无论它们是正在运行还是已停止。

abhishek@linux-console:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
1bcf775d8cc7        ubuntu              "bash"              19 minutes ago      Exited (0) About a minute ago                       container-2
94f92052f55f        debian              "bash"              29 minutes ago      Up 29 minutes                                   container-1

如果状态为Exited,则表示容器不再运行。

2.停止多个docker容器

您也可以一次停止多个 docker 容器。您只需提供容器名称和 ID。

docker stop container_id_or_name_1 container_id_or_name_2 container_id_or_name_3

与之前一样,输出将仅显示容器的名称或 ID:

abhishek@linux-console:~$ docker stop container-1 container-2 container-3
container-1
container-2
container-3

3. 停止与镜像关联的所有容器

到目前为止,您所看到的通过明确提及容器的名称或 ID 来停止容器。

如果你想停止某个 docker 镜像的所有正在运行的容器怎么办?想象一个场景,您想要删除 Docker 映像,但必须停止所有关联的正在运行的容器。

您可以一一提供容器名称或 ID,但这非常耗时。您可以做的是根据基础镜像过滤所有正在运行的容器。

只需将 IMAGE_NAME 替换为您的 docker 映像名称,您就应该能够停止与该映像关联的所有正在运行的容器。

docker ps -q --filter ancestor=IMAGE_NAME | xargs docker stop

选项 -q 仅显示容器 ID。感谢出色的 xargs 命令,这些容器 ID 作为参数通过管道传输到 docker stop。

4.停止所有正在运行的docker容器

您可能会遇到需要停止所有正在运行的容器的情况。例如,如果你想删除 Docker 中的所有容器,你应该事先停止它们。

为此,您可以使用与上一节中看到的类似的内容。只需删除图像部分即可。

docker ps -q | xargs docker stop

5. 优雅地停止容器

老实说,docker 默认情况下会优雅地停止容器。当您使用 docker stop 命令时,它会在强行杀死容器之前给容器 10 秒的时间。

这并不意味着停止容器总是需要 10 秒。只是如果容器正在运行某些进程,它会在 10 秒内停止进程并退出。

Docker stop 命令首先发送 SIGTERM 命令。如果容器在此期间停止,它会发送 SIGKILL 命令。进程可能会忽略 SIGTERM,但 SIGKILL 会立即终止该进程。

我希望您知道 SIGTERM 和 SIGKILL 之间的区别。

您可以使用 -t 选项更改 10 秒的宽限期。假设您想在停止容器之前等待 30 秒:

docker stop -t 30 container_name_or_id

最后……

我认为这么多的信息很好地涵盖了这个主题。您了解很多有关停止 docker 容器的知识。

请继续关注更多 docker 技巧和教程。如果您有疑问或建议,请在评论部分告诉我。

相关文章: