docker restart 是什么
对同一个容器先停止再启动,等价于顺序执行两个动作。进程与运行时状态被重置,容器配置与可写层保留:挂在卷里的数据、容器内的临时文件都还在。它属于原地重启,适合让应用重新读取挂载进来的配置。
基本信息
| 语法 | docker restart [-t 秒] CONTAINER... |
|---|---|
| 参数作用 | 停止阶段的等待时间,超时后强杀 |
| 影响 | 服务连接中断,容器内进程全部重启 |
| 保留内容 | 容器配置、可写层、挂载数据 |
| 不生效内容 | 端口、挂载、环境变量等创建期配置的改动 |
典型使用场景
- 配置热更新不便时重启:挂载的配置文件改动后用重启让应用重新读取
- 临时恢复:应用卡死或连接池异常时重启容器快速恢复服务
- 证书替换后生效:证书文件更新后重启服务使其重新加载
- 资源回收:内存缓慢增长的服务在维护窗口重启,暂时缓解压力
- 发布过程中的单机动作:确认新版镜像已就位后重启相关容器
常用示例
常用示例
docker restart web # 默认等待十秒
docker restart -t 30 db # 有状态服务给足收敛时间
docker restart $(docker ps -q --filter label=role=worker) # 批量重启
docker logs --tail 30 web # 重启后确认输出正常
docker inspect -f '{{.State.Status}}' web # 确认状态稳定改了配置要不要重启
| 改动内容 | 操作 | 原因 |
|---|---|---|
| 挂载目录里的配置文件 | 重启容器或按应用方式重载 | 文件在宿主上,容器内路径不变,重启即可读取 |
| 镜像内容 | 重新构建镜像并重建容器 | 重启仍用原镜像,改动不会生效 |
| 端口与挂载定义 | 删除容器后重建 | 创建期参数无法通过重启修改 |
| 环境变量 | 删除容器后重建 | 变量在创建时注入 |
| 应用内部开关 | 按应用提供的重载方式 | 避免整容器重启带来的中断 |
优选顺序与替代手段
- 优先用应用自身的重载机制,例如配置热加载,减少服务中断
- 其次用发送信号的方式让进程重新加载配置
- 再次才是重启容器,代价是连接全部中断
- 多实例环境逐个滚动重启,避免一次性全部不可用
- 有状态服务先确认没有正在执行的长任务,再安排重启
重启不会应用编排文件的改动。改完编排文件后要用拉起命令触发容器重建,这是「改了配置重启没用」的常见原因。
反复崩溃的容器重启只是在重复失败。先看日志与退出码找根因,重启次数与状态变化历史是判断的关键依据。