目录

Docker stop、start、restart、kill 命令教程:停止和重启容器

docker stop、start、restart、kill、pause 和 unpause 用于控制容器的运行状态;容器生命周期的完整流程请参见容器生命周期。

语法

docker stop [选项] 容器 [容器...]
docker start [选项] 容器 [容器...]
docker restart [选项] 容器 [容器...]
docker kill [选项] 容器 [容器...]
docker pause 容器 [容器...]
docker unpause 容器 [容器...]

选项

命令选项说明
docker stop-s, --signal string发送给容器的信号
docker stop-t, --timeout int等待多少秒后强制结束容器
docker start-a, --attach附加到容器的 STDOUT/STDERR,并转发信号
docker start--checkpoint string从指定的 checkpoint 恢复
docker start--checkpoint-dir string使用自定义的 checkpoint 存储目录
docker start--detach-keys string覆盖用于退出附加状态的按键组合
docker start-i, --interactive附加容器的 STDIN
docker restart-s, --signal string发送给容器的信号
docker restart-t, --timeout int等待多少秒后强制结束容器
docker kill-s, --signal string发送给容器的信号

pause 和 unpause 的说明中没有列出其他选项。也可以使用 docker container 子命令形式调用 stop、start、restart、kill 和 pause。

示例

stop 的等待时间和结束状态

$ time docker stop web
web
real	0m 0.50s
user	0m 0.00s
sys	0m 0.01s

$ time docker stop sleeper
sleeper
real	0m 10.44s
user	0m 0.01s
sys	0m 0.01s

$ docker ps -a --format 'table {{.Names}}\t{{.Status}}'
NAMES        STATUS
sleeper      Exited (137) 1 second ago
web          Exited (0) 12 seconds ago
uses-redis   Up 51 seconds
registry     Up About a minute
  • web 在 0.50 秒后停止,状态为 Exited (0):nginx 收到 SIGTERM 后正常退出。
  • sleeper 等待了 10.44 秒,状态为 Exited (137):sleep 是容器中的 PID 1,没有处理 SIGTERM。Docker 等满默认的 10 秒后改为发送 SIGKILL(137 = 128 + 9)。详见容器生命周期中的 PID 1 说明。
  • docker stop --help 中的 -t, --timeout 可设置等待多少秒后强制结束容器;此示例展示了默认等待后强制结束的区别。
  • docker ps -a 会列出已停止的容器,uses-redis 和 registry 仍显示为运行中。

start、restart 和 kill

$ docker start web
web

$ docker restart -t 2 web
web

$ docker kill sleeper
Error response from daemon: cannot kill container: sleeper: container ebcd31ea947204593383614f0fa2b0b9baba719e4858042e8120b3d544468f20 is not running

$ docker start sleeper && docker kill sleeper
sleeper
sleeper

$ docker ps -a --format 'table {{.Names}}\t{{.Status}}'
NAMES        STATUS
sleeper      Exited (137) Less than a second ago
web          Up 2 seconds
uses-redis   Up 54 seconds
registry     Up About a minute
  • docker start 启动已停止的 web;docker restart -t 2 使用 2 秒超时重启它。
  • 对已停止的容器执行 docker kill sleeper 会失败,错误提示容器未运行;先 start 再 kill 则两个命令都会成功。
  • kill 后,sleeper 显示为 Exited (137),而 web 显示为 Up。

pause 和 unpause

$ docker pause web
web

$ docker ps --format 'table {{.Names}}\t{{.Status}}'
NAMES        STATUS
web          Up 2 seconds (Paused)
uses-redis   Up 55 seconds
registry     Up About a minute

$ docker exec web nginx -v
Error response from daemon: Container web is paused, unpause the container before exec

$ docker unpause web
web
  • docker pause 会暂停容器中的所有进程,状态栏会显示 (Paused)。
  • 暂停期间,docker exec 会失败,错误信息要求先 unpause;docker unpause 会解除暂停。

发送信号让 nginx 重新加载

$ docker kill -s HUP web
web

$ docker logs --tail 3 web
2026/10/25 15:30:32 [notice] 1#1: signal 17 (SIGCHLD) received from 22
2026/10/25 15:30:32 [notice] 1#1: worker process 22 exited with code 0
2026/10/25 15:30:32 [notice] 1#1: signal 29 (SIGIO) received

$ docker kill -s HUP web2
web2

$ docker logs web2 2>&1 | grep -E 'SIGHUP|reconfiguring'
2026/10/25 15:31:00 [notice] 1#1: signal 1 (SIGHUP) received, reconfiguring
2026/10/25 15:31:00 [notice] 1#1: reconfiguring
  • docker kill -s HUP 会向容器发送指定信号;这里 web2 的日志明确显示收到 SIGHUP 后正在重新加载。
  • docker logs --tail 3 限制为显示最近三行;另一个示例将 stderr 合并到 stdout,再使用 grep 筛选日志。

容器名称不存在

$ docker stop nosuch
Error response from daemon: No such container: nosuch

指定的容器名称不存在时,Docker 会提示 No such container。

相关章节

动手练习

练习:容器 sleeper 已停止。先启动它,再立即强制结束,最后列出所有容器的名称和状态。

答案
docker start sleeper && docker kill sleeper
docker ps -a --format 'table {{.Names}}\t{{.Status}}'

常见问题

为什么 docker stop sleeper 要等约 10 秒?

这次 docker stop sleeper 耗时 10.44 秒,之后状态为 Exited (137);docker stop --help 说明 -t, --timeout 表示等待多少秒后强制结束容器。

docker kill 可以用于已停止的容器吗?

不行。对已停止的 sleeper 执行 docker kill 时,Docker 会提示容器当前未运行;先用 docker start sleeper 启动后才能 kill。

容器 pause 之后还能用 docker exec 吗?

不行。示例中的 docker exec web nginx -v 提示容器已暂停,必须先执行 docker unpause web。

如何让 nginx 重新加载配置而不停止容器?

向容器发送 HUP:docker kill -s HUP web2。日志会显示 SIGHUP received, reconfiguring。

更新于 2026年10月26日