容器状态管理
容器有多种运行状态,下面介绍如何控制容器的生命周期。
容器状态
容器可能处于以下状态:
| 状态 | 说明 | 触发操作 |
|---|---|---|
| created | 已创建未启动 | docker create |
| running | 运行中 | docker start/run |
| paused | 已暂停 | docker pause |
| stopped | 已停止 | docker stop |
| dead | 异常终止 | 进程崩溃 |
查看容器状态
Bash
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 查看容器状态详情
docker inspect --format='{{.State.Status}}' my-nginx
# 输出
running
启动与停止
docker start
启动已停止的容器:
Bash
# 启动容器
docker start my-nginx
# 启动并附加终端
docker start -ai my-nginx
# 通过容器 ID 启动
docker start a1b2c3d4e5f6
docker stop
优雅停止容器(发送 SIGTERM,等待 10 秒后 SIGKILL):
Bash
# 停止容器
docker stop my-nginx
# 指定超时时间(秒)
docker stop -t 30 my-nginx
# 停止多个容器
docker stop container1 container2
docker stop先发送 SIGTERM 信号,给予 10 秒优雅退出时间,超时后发送 SIGKILL 强制终止。
docker restart
重启容器(先 stop 再 start):
Bash
# 重启容器
docker restart my-nginx
# 指定超时时间
docker restart -t 15 my-nginx
暂停与恢复
docker pause
暂停容器内所有进程(使用 cgroups freezer):
Bash
# 暂停容器
docker pause my-nginx
# 查看状态
docker inspect --format='{{.State.Paused}}' my-nginx
# 输出: true
# 恢复容器
docker unpause my-nginx
暂停期间容器不消耗 CPU,内存保持不变,网络请求挂起。
强制停止与删除
docker kill
强制停止容器(直接发送 SIGKILL):
Bash
# 强制停止
docker kill my-nginx
# 发送自定义信号
docker kill --signal=SIGUSR1 my-nginx
docker rm
删除已停止的容器:
Bash
# 删除已停止的容器
docker rm my-nginx
# 强制删除运行中的容器
docker rm -f my-nginx
# 删除所有已停止的容器
docker container prune
自动重启策略
Bash
# 创建容器时设置重启策略
docker run -d --name my-nginx --restart unless-stopped nginx
# 更新已有容器的重启策略
docker update --restart unless-stopped my-nginx
重启策略选项:
| 策略 | 说明 |
|---|---|
no | 不自动重启(默认) |
always | 总是重启 |
unless-stopped | 除非手动停止,否则总是重启 |
on-failure[:max-retries] | 仅在失败时重启,可指定最大重试次数 |
要点总结
- 容器状态:created → running → stopped/paused
docker stop优雅停止(SIGTERM + 10s 超时),docker kill强制停止(SIGKILL)docker pause暂停容器进程,不消耗 CPU,可恢复docker restart= stop + start,快速重启- 生产环境建议使用
--restart unless-stopped保证服务可用性
📝 发现内容有误?点击此处直接编辑