用“舞台换景”讲清 Docker 的 Restart 与 Recreate
最近更新一个 Docker 服务时我遇到了一个问题。镜像拉取成功容器也重新启动了整个过程没有任何报错dockercompose pull appdockercompose restart app可打开页面一看显示的仍然是 V1。第一反应通常是镜像没拉下来Docker 缓存出了问题要不要再重启一次其实 Docker 什么都没有做错。问题在于pull与restart操作的不是同一个对象pull更新本地镜像restart重新启动已经存在的容器让服务使用新镜像需要根据新镜像重新创建容器。我们可以把这个过程想成一次舞台换景剧院已经把新版布景运到了后台但台前仍然搭着旧布景。此时把幕布拉上再拉开只会让原来的舞台重新开场不会自动把后台的新布景换上来。*新版布景已经到达后台但台前仍在使用旧布景——就像新镜像已经拉到本地旧容器却没有被替换。*一、先分清镜像和容器镜像Image是一份标准化的软件包包含运行程序需要的文件、依赖和默认配置。它有点像版本化的安装包但这个类比只用来帮助入门Docker 镜像还包含分层文件系统和启动元数据。容器Container是根据某份镜像创建出来的隔离实例。创建时Docker 会选定具体镜像并结合环境变量、端口、挂载和启动命令准备运行环境。两者最重要的区别是对象负责什么生命周期镜像提供程序、依赖和默认配置创建后内容不可原地修改容器保存根据镜像创建出的实例状态可以启动、停止、重启或删除停止的容器仍然是容器。docker ps只显示运行中的容器docker ps -a才会把已经停止的容器也列出来。同一份镜像可以创建多个彼此独立的容器删除一个容器不会删除镜像更新镜像也不会自动改造已经创建好的容器。pull之前已经创建重新创建远端镜像 V2本地镜像 V2本地镜像 V1旧容器仍绑定 V1新容器使用 V2二、pull更新镜像不替换容器执行dockerpull nginx:alpineDocker 会从远程仓库下载nginx:alpine当前指向的镜像并更新本地的标签引用。这里有一个容易混淆的细节镜像内容由 image ID 或 digest 标识创建后不可原地修改但nginx:alpine这样的 tag 可以重新指向另一份镜像。因此下次pull之后同一个 tag 可能已经指向 V2但旧容器仍然绑定着创建时的 V1。如果想亲眼确认可以比较两者# 容器创建时绑定的镜像 IDdockerinspect--format{{.Image}}web# 当前 tag 指向的镜像 IDdockerimage inspect--format{{.Id}}nginx:alpine两个 ID 不同说明新镜像已经到了旧容器却还没有被替换。Docker 不自动替换容器其实是一种稳定性保证。否则一次普通的pull就可能直接改变正在运行的线上服务。[!important]镜像变了只代表本地有了一个可用的新版本容器重建后才代表服务真正开始运行新版本。三、restart为什么不能完成升级dockerrestart webrestart会停止并重新启动同一个容器。容器没有换绑定的镜像没有换创建时确定的环境变量、端口映射和挂载定义也没有换。它只是让容器中的主进程重新运行一次。所以restart适合这些情况进程临时卡死服务出现一次性异常已挂载的配置文件发生变化而且程序会在启动时重新读取只是希望让同一个运行实例重新开始。它不适合用来应用新镜像、新环境变量或新端口映射。这些信息大多在容器创建时确定发生的变化只执行 restart通常需要拉取新镜像仍使用旧镜像recreate修改环境变量仍使用创建时的值recreate修改端口映射原映射不变recreate修改 Dockerfile 或构建内容旧镜像、旧容器都不变build 后 recreate修改已挂载的配置文件文件已变化但程序未必重读reload 或 restart四、reload、restart、recreate的区别这三个动作看起来相近改变的层级却完全不同。Reload让应用重新读取配置如果修改的是已经挂载进容器的配置文件并且应用本身支持热加载可以调用应用提供的 reload。例如 Nginx 可以重新读取部分配置。reload 是应用程序自己的能力不是 Docker 提供的一种通用容器状态。哪些配置能够热加载需要查看具体程序的说明。Restart重新启动同一个容器dockercompose restart app它不会采用新的镜像也不会应用 Compose 中新修改的环境变量、端口等创建期配置。Recreate创建替代容器recreate 会根据当前镜像和当前创建期配置创建一个新容器用它替换旧容器。这才是更新镜像、环境变量、端口或挂载定义后通常需要的动作。回到舞台restart 是落幕后重新开幕台上还是原来的雨夜布景recreate 则是先撤掉旧景换上后台准备好的晴日新景再重新开场。可以把判断方法压缩成三句话进程临时异常考虑 restart应用支持重新读取配置考虑 reload镜像或创建期配置变化就要 recreate。需要注意重建容器时旧容器的可写层不会保留。重要数据应放在 Volume、Bind Mount 或外部存储中。Volume 独立于容器可写层但它也不是备份docker compose down -v仍然可以删除命名卷。五、让 Compose 完成正确的更新闭环真实项目通常不只有一个容器还可能包含 API、数据库、Redis 和 Nginx。这时可以让 Compose 根据声明的配置协调实际运行状态。更新远端镜像服务时dockercompose pull appdockercompose up-dapppull明确拉取镜像up -d检查服务使用的镜像和配置。发现变化时Compose 会停止并重建对应容器同时保留已挂载的卷。它不会每次都无条件重建。也可以明确要求启动前拉取dockercompose up-d--pullalways app如果修改了 Dockerfile 或构建上下文dockercompose up-d--buildapp只有在明确希望无论是否检测到变化都替换容器时才需要dockercompose up-d--force-recreate app--force-recreate不是默认万能修复。大多数情况下普通的compose up -d会在检测到镜像或服务配置变化后完成重建。阅读一份compose.yml时可以按下面的顺序services有哪些服务image/build程序来自现有镜像还是本地构建ports哪些端口暴露给宿主机volumes哪些数据脱离容器可写层保存environment服务带着什么参数启动depends_on/networks服务如何依赖和通信。depends_on的简短写法只保证依赖服务先启动不保证它已经能接受请求。需要等待服务真正就绪时要结合healthcheck和condition: service_healthy应用侧最好仍保留连接重试。六、下次更新不生效先问三个问题现在回头看最开始的操作dockercompose pull appdockercompose restart app第一条命令更新了本地镜像第二条命令却只启动了原来的容器。服务继续运行旧版本完全符合 Docker 的生命周期逻辑。下次再遇到“明明更新了为什么没有生效”先问自己我更新的是镜像、创建期配置还是应用能够重新读取的文件我现在操作的是当前镜像还是之前创建的旧容器这次需要重新读配置、重启同一容器还是创建替代容器最后记住这一句就够了新布景到了后台重新拉一次幕不会自动换景要演新版得先换景再开场。对应到 DockerPull 是拿到新镜像restart 是重启旧容器recreate 才让服务换成按当前镜像与配置创建的新容器。

相关新闻

Compute Shader核心原理与GPU并行计算优化实战指南

Compute Shader核心原理与GPU并行计算优化实战指南

1. 项目概述:为什么ComputeShader是图形学性能的“核武器”?在图形渲染管线里,我们习惯了顶点着色器、片元着色器的流水线作业。但当你需要处理海量粒子模拟、复杂物理碰撞、实时体素化或者全局光照的预计算时,传统的渲染管线就显…

2026/7/26 8:24:49阅读更多 →
【超声波在电池上的应用之一】超声波如何“听“懂电池?—声学物理基础与电池响应机制深度解析

【超声波在电池上的应用之一】超声波如何“听“懂电池?—声学物理基础与电池响应机制深度解析

TL;DR当前主流BMS依赖电压、电流、温度"电学三件套"感知电池状态,但对电池内部机械/结构变化缺乏直接感知能力。超声波检测(UT)技术通过向电池发射声波并分析其传播特征——飞行时间(ToF)、振幅衰减、频谱特…

2026/7/26 8:24:49阅读更多 →
Windows文件关联机制与注册表操作详解

Windows文件关联机制与注册表操作详解

1. 文件关联的本质与系统机制在Windows操作系统中,文件关联(File Association)是一套将特定扩展名的文件与对应应用程序绑定的机制。这个看似简单的功能背后,其实涉及注册表、MIME类型、默认程序设置等多层系统架构。当我们双击一…

2026/7/26 8:24:49阅读更多 →
从零实现《三角洲行动》手游自动跑刀脚本:ADB 直控 + OpenCV 视觉识别 + 固定点位搜刮)三角洲自动跑刀教程

从零实现《三角洲行动》手游自动跑刀脚本:ADB 直控 + OpenCV 视觉识别 + 固定点位搜刮)三角洲自动跑刀教程

从零实现《三角洲行动》手游自动跑刀脚本:ADB 直控 OpenCV 视觉识别 固定点位搜刮 从零实现《三角洲行动》手游自动跑刀脚本:ADB 直控 OpenCV 视觉识别 固定点位搜刮一、前言二、整体架构与技术栈三、ADB 控制层:截图、点击、滑动四、核心…

2026/7/26 9:39:09阅读更多 →
Navicat Premium 17 免费安装教程

Navicat Premium 17 免费安装教程

Navicat Premium 17 是一款强大的数据库管理工具,支持 MySQL、PostgreSQL、SQL Server、Oracle、MongoDB 等多种数据库。本教程将带你从官方下载、安装、配置到合法激活,安全合规,适合开发者、运维、学生等人群。 一、下载 Navicat Premium…

2026/7/26 9:39:09阅读更多 →
C++手写线性回归:从数学公式到工程实现

C++手写线性回归:从数学公式到工程实现

1. 项目概述:从数学公式到C代码的旅程线性回归,这个名字听起来可能有点学术,但它的核心思想却出奇地简单和强大。简单来说,它就是在数据点中找一条“最合适”的直线,用这条直线来描述输入和输出之间的关系。比如&#…

2026/7/26 9:39:09阅读更多 →
电脑老弹“缺DLL”?我自己折腾了几次总算搞明白了

电脑老弹“缺DLL”?我自己折腾了几次总算搞明白了

说实话,我电脑水平一般,平时也就打打游戏、用用办公软件。但最烦的就是,游戏下好了,一打开弹个红叉——“找不到xxx.dll”或者“应用程序无法正常启动0xc000007b”。第一次遇到我真以为电脑坏了,差点拿去修。 后来实在…

2026/7/26 9:39:09阅读更多 →
从 Ollama 到云端:Hexo AI 摘要的多平台进化之路

从 Ollama 到云端:Hexo AI 摘要的多平台进化之路

目录 从 Ollama 到云端:Hexo AI 摘要的多平台进化之路 Ollama 方案的局限 新架构设计 部署 Docker拉起Redis(容器编排) 部署AI代理 Nginx反向代理 前端集成 重新构建Hexo 查看Redis缓存 删除Redis缓存 进入Redis CLI交互式模式 效果对比 总结 从 Ollam…

2026/7/26 9:39:09阅读更多 →
YOLOv11手势识别系统:边缘计算与工程实践

YOLOv11手势识别系统:边缘计算与工程实践

1. 项目背景与核心价值 手势识别作为人机交互的重要分支,正在从实验室走向工业应用。这套基于YOLOv11的全栈系统开发方案,完美融合了前沿算法与工程实践。我在实际部署中发现,传统手势识别方案存在三大痛点:实时性不足&#xff08…

2026/7/26 9:37:09阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/26 0:01:28阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/26 0:01:28阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/26 0:01:28阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/26 0:01:28阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/26 0:01:28阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/26 0:01:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/25 23:03:25阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/25 19:03:04阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/25 19:03:04阅读更多 →