docker restart 是什么
docker restart 等于先 stop 再 start:给容器内进程发停止信号,等待超时后强制杀掉,再以原有配置重新启动。它常用于改完配置文件后让应用重新加载,但重启期间服务是中断的,而且频繁重启只是掩盖症状。优先考虑应用自身的平滑重载能力,其次才是重启容器。
基本信息
| 本质 | 先 stop(可带 -t 指定超时秒数)再 start |
|---|---|
| 配置保留 | 容器创建参数不变,挂载、网络、环境变量都沿用 |
| 场景 | 应用不支持热加载时的兜底手段;验证自愈能力 |
| 中断影响 | 重启期间服务不可用,多实例需逐个滚动重启 |
| 替代方案 | 优先用应用内重载,如 nginx -s reload、systemctl reload |
典型使用场景
- 改配置后重载:应用不支持热加载,重启是最直接的生效方式
- 验证自动拉起:配合重启策略测试进程崩溃后的自愈流程
- 释放文件句柄:日志文件被删除但句柄未释放,重启后空间归还
- 更新环境变量:容器创建参数已固定,变更需重建容器而非重启
- 恢复假死进程:进程还在但已不响应,重启比逐个排查更快恢复
重启示例
重启示例
docker restart myapp # 默认等待 10 秒后强制结束
docker restart -t 30 myapp # 给应用 30 秒优雅退出时间
docker restart $(docker ps -q --filter "name=web") # 批量重启同类容器
# 优先尝试应用内重载,避免整个容器中断
docker exec nginx nginx -s reload
docker logs --tail 100 --since 5m myapp # 重启后确认启动是否正常重启相关操作对比
| 操作 | 是否保留容器 | 是否中断服务 | 适用场景 |
|---|---|---|---|
| docker restart | 保留 | 中断 | 改配置后重新加载 |
| docker stop 加 start | 保留 | 中断 | 需要分步观察启动过程 |
| docker exec 内重载 | 保留 | 通常不断 | 应用支持平滑重载 |
| docker rm 后 run | 重建 | 中断 | 需要改端口、挂载等创建参数 |
| 滚动重启 | 逐个保留 | 单实例短暂中断 | 集群多副本部署 |
给容器配 --restart=unless-stopped 后进程崩溃会被自动拉起;如果观察到重启风暴,应当去日志里找崩溃根因,而不是靠人工反复重启。
单机多实例服务不要同时重启全部容器:会造成整体服务中断。按实例分批滚动,确认前一批恢复健康后再处理下一批。