如何停止Docker容器

时间:2020-03-05 15:25:15  来源:igfitidea点击:

此Docker教程讨论了停止单个Docker容器,多个Docker容器或者所有运行Docker容器的方法。
我们还将学会优雅地停止Docker容器。

要停止Docker容器,我们所要做的就是以下列方式使用容器ID或者容器名称:

docker stop container_ID_or_name

我们也可以使用Docker Container Stop Container_id_or_name命令,但该命令中的一个添加单词,它没有提供任何其他优点,因此请使用Docker Stop。

但是,如果我们是Docker,则需要阻止我们应该了解的Docker容器。

停止Docker容器的实际示例

首先我们应该知道如何获取容器名称或者ID。

我们可以使用"docker ps""命令列出所有正在运行的Docker容器。

没有任何选项,Docker PS命令仅显示运行容器。

Hyman@theitroad:~$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容器

要停止特定容器,请使用其ID或者名称使用Docker Stop命令:

docker stop container_name_or_ID

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

Hyman@theitroad:~$docker stop 1bcf775d8cc7
1bcf775d8cc7

我们可以在已停止的容器上使用Docker Stop命令。
它不会抛出任何错误或者不同的输出。

我们可以使用Docker PS -A命令验证是否已停止容器。
-a选项显示它们是否正在运行或者停止所有容器。

Hyman@theitroad:~$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

如果退出状态,则表示容器不再运行。

2.停止多个Docker容器

我们也可以立即停止多个Docker容器。
我们只需提供容器名称和ID。

docker stop container_id_or_name_1 container_id_or_name_2 container_id_or_name_3

如前所述,输出只会显示容器的名称或者ID:

Hyman@theitroad:~$docker stop container-1 container-2 container-3
container-1
container-2
container-3

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

到目前为止,你通过明确提到他们的名字或者ID来阻止容器。

如果你想停止某个Docker图像的所有运行容器,该怎么办?
想象一下,我们想要删除Docker Image的场景,但我们必须停止所有关联的运行容器。

我们可以逐个提供容器名称或者ID,但这是耗时的。
我们可以做的是根据其基础图像过滤所有运行的容器。

只需替换Docker Image Name的Image_Name,我们应该能够停止与该图像关联的所有运行容器。

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将立即杀死过程。

我们可以使用-t选项更改此宽限期为10秒钟。
假设我们希望在停止容器之前等待30秒:

docker stop -t 30 container_name_or_id