如何终止正在运行的 Docker 容器

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Docker 容器是用于应用程序部署和虚拟化的强大工具。了解如何正确终止正在运行的容器对于有效的容器管理至关重要。本教程将探讨停止和删除 Docker 容器的各种技术,帮助开发人员和系统管理员维护干净且高效的容器化环境。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/restart("Restart Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") subgraph Lab Skills docker/ps -.-> lab-419600{{"如何终止正在运行的 Docker 容器"}} docker/stop -.-> lab-419600{{"如何终止正在运行的 Docker 容器"}} docker/restart -.-> lab-419600{{"如何终止正在运行的 Docker 容器"}} docker/rm -.-> lab-419600{{"如何终止正在运行的 Docker 容器"}} docker/logs -.-> lab-419600{{"如何终止正在运行的 Docker 容器"}} end

容器生命周期

理解 Docker 容器状态

Docker 容器具有明确定义的生命周期,代表其存在的不同阶段。理解这些状态对于有效的容器管理至关重要。

容器状态概述

状态 描述 典型转换
创建(Created) 容器已初始化但未运行 可以启动
运行(Running) 容器正在积极执行 可以停止或暂停
暂停(Paused) 容器的进程被临时挂起 可以恢复或停止
停止(Stopped) 容器已完成执行或已被手动停止 可以重启
退出(Exited) 容器已完成其主要进程 可以删除

容器生命周期工作流程

stateDiagram-v2 [*] --> Created : docker create Created --> Running : docker start Running --> Paused : docker pause Paused --> Running : docker unpause Running --> Stopped : docker stop Stopped --> Running : docker restart Stopped --> [*] : docker rm

基本容器生命周期命令

创建容器

docker create --name mycontainer ubuntu:22.04

启动容器

docker start mycontainer

停止容器

docker stop mycontainer

关键生命周期概念

  1. 容器是轻量级的、隔离的环境
  2. 它们可以在不同状态之间转换
  3. 生命周期管理对于高效利用资源至关重要

在 LabEx,我们建议掌握这些容器生命周期原则,以优化您的 Docker 工作流程并提高系统性能。

停止容器

理解容器终止方法

Docker 提供了多种停止正在运行的容器的方法,每种方法都有特定的用例和行为。

停止技术比较

方法 命令 行为 宽限期
docker stop docker stop 发送 SIGTERM,然后发送 SIGKILL 默认 10 秒
docker kill docker kill 立即终止 立即终止
docker pause docker pause 暂停容器进程 可恢复

优雅地终止容器

使用 docker stop

## 停止特定容器
docker stop container_name

## 停止多个容器
docker stop container1 container2 container3

使用自定义宽限期停止

## 使用 30 秒宽限期停止
docker stop -t 30 container_name

高级终止工作流程

flowchart TD A[运行中的容器] --> |docker stop| B[发送 SIGTERM] B --> C{进程有响应吗?} C -->|是| D[优雅关闭] C -->|否| E[发送 SIGKILL] E --> F[容器停止]

处理无响应的容器

强制终止

## 立即杀死容器
docker kill container_name

最佳实践

  1. 优先使用 docker stop 进行优雅终止
  2. 设置适当的宽限期
  3. 系统地处理容器清理

在 LabEx,我们建议理解这些终止技术,以便有效地管理容器生命周期。

终止技术

高级容器终止策略

基于信号的终止方法

flowchart TD A[容器进程] --> |SIGTERM| B[优雅关闭] A --> |SIGKILL| C[立即终止] A --> |SIGSTOP| D[进程暂停]

终止信号比较

信号 名称 行为 使用场景
SIGTERM 终止 优雅关闭 推荐的默认方式
SIGKILL 杀死 立即终止 强制停止无响应的容器
SIGSTOP 停止 暂停进程 临时挂起

程序化容器终止

使用 Docker CLI

## 使用自定义信号终止
docker kill --signal=SIGTERM container_name

## 删除所有已停止的容器
docker container prune

脚本化终止

#!/bin/bash
## 自动容器清理脚本
docker ps -q | xargs -r docker stop
docker container prune -f

处理复杂终止场景

批量容器管理

## 通过过滤器停止容器
docker stop $(docker ps -f "label=environment=production" -q)

基于超时的终止

## 使用超时机制停止
docker stop -t 30 container_name

错误处理与日志记录

捕获终止日志

docker stop container_name 2>&1 | tee container_stop.log

最佳实践

  1. 优先使用优雅终止信号
  2. 实施适当的错误处理
  3. 使用日志进行调试

在 LabEx,我们强调理解细微的容器终止技术以实现强大的系统管理。

总结

掌握 Docker 容器终止是现代软件开发和 DevOps 实践中的一项基本技能。通过了解停止和删除容器的不同方法,你可以有效地管理系统资源、控制应用程序生命周期,并保持简化的 Docker 工作流程。无论是使用优雅关闭命令还是强制终止技术,这些策略都能确保实现最佳的容器管理。