最近更新一个 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 才让服务换成按当前镜像与配置创建的新容器。
企业数字化 ERP 产品动态
相关推荐
Claude AI编程助手实战:交互式代码学习与应用 1. 项目概述"Claude code学习记录"这个项目标题看似简单,却蕴含着一个开发者对新技术探索的完整历程。作为一名长期关注AI编程助手的开发者,我最近系统性地研究了Claude的代码交互能力,并记录下了整个学习过程中的关键发现和实战经… · 2026/11/12 3:29:12
# 猜数字游戏 — HarmonyOS交互逻辑与随机算法实现 一、应用概述
猜数字(Number Guessing Game)是一款经典的数字推理小游戏,几乎伴随了每一代编程学习者的成长。其规则简单明了:系统随机生成一个1到100之间的整数,玩家通过输入猜测的数字,系统给出"大了… · 2026/10/24 3:40:12
# 番茄钟应用 — HarmonyOS定时任务与状态机设计实战 一、应用概述
番茄工作法(Pomodoro Technique)是由弗朗西斯科西里洛(Francesco Cirillo)在20世纪80年代末创立的时间管理方法。其核心思想是将工作时间分割为若干个"番茄时间"(通常为25分钟)&… · 2026/11/11 11:34:49
建筑电工证真假报名入口与办理流程:上岗必备,你得知道的真相 建筑电工证真假报名入口与办理流程:上岗必备,你得知道的真相 之前考的证在外省能不能转过来?这是很多持证人员关心的问题,特别是像你这样在外省打工、回老家发展或者跨省工作的电工。别急,这事儿还真不是你一个人在担心,也别被那些“建筑电工证真假”的… · 2026/11/12 3:28:57
电工证低压考题怎么报名?实操考试心里没底怕挂科 电工证低压考题怎么报名?实操考试心里没底怕挂科 实操考试心里没底怕挂科,这是很多准备考电工证低压考题的学员的真实写照。特别是像我这样从开封转岗过来的,对考试流程、题型、实操项目都不熟悉,生怕一个不小心就挂科,耽误时间和机会。不过,只要你掌握… · 2026/11/12 3:28:57
职校生如何考电工证呢通过率揭秘 职校生如何考电工证呢通过率揭秘 证书过期了不知道怎么复审延期,这种情况在特种作业领域并不少见,尤其是对于刚入行的职校生来说,更可能因为对流程不熟悉而错过关键节点。今天就从“职校生如何考电工证”入手,结合【通过率揭秘】,为你梳理从报名、考试到… · 2026/11/12 3:28:57
电工证审证要不要换证值不值得考?洛阳电工上岗必看攻略 电工证审证要不要换证值不值得考?洛阳电工上岗必看攻略 你现在正坐在电脑前,可能刚毕业,或者想换工作,但手里没有电工证,进不了工地、进不了工厂、进不了工地的项目部,这事儿真不是闹着玩的。 急需特种作业证才能上岗找工作… · 2026/11/12 3:28:57
江门电工证考试试题官方回应:没有证别想上岗找工作 江门电工证考试试题官方回应:没有证别想上岗找工作 最近,我在江门一家建筑工地当电工时,遇到了一个大麻烦,差点耽误了整个项目的进度。事情是这样的,我们工地在进行高压线路改造时,因为一名电工没有有效期内的高压电工证,被当地应急管理局责令停工整改… · 2026/11/12 3:28:57
长葛特种工操作证网上查询怎么搞?证书过期了不知道怎么复审延期 长葛特种工操作证网上查询怎么搞?证书过期了不知道怎么复审延期 证书过期了不知道怎么复审延期,这事儿别慌,很多人遇上过,尤其是从事特种作业的朋友们。现在不少朋友都在网上查询长葛特种工操作证的相关信息,但信息太多反而让人更迷茫。本文就来聊聊长葛… · 2026/11/12 3:27:56
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/11 12:18:07
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/11 19:07:25
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/11 17:14:54
电工证设年审有效期多久官方回应来了,工地太忙根本没时间复习考试 电工证设年审有效期多久官方回应来了,工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是很多一线电工、焊工、高处作业人员的真实写照。尤其是像你这样刚毕业的鹤壁工程类毕业生,一边要找工作,一边要考证,时间紧张,复习效率低。但你可能不知… · 2026/11/12 0:00:56
新乡电工证实操怕挂科?电工作业动漫图+报考避坑全解析 新乡电工证实操怕挂科?电工作业动漫图+报考避坑全解析 实操考试心里没底怕挂科?你不是一个人。新乡的水利工程从业者,很多在报考电工证的时候都担心自己操作不熟练、考试不通过, 千万别踩坑 ,选对资料和方法真的能提高通过率。… · 2026/11/12 0:00:56
网电工证千万别踩坑:实操考试心里没底怕挂科怎么破? 网电工证千万别踩坑:实操考试心里没底怕挂科怎么破? 实操考试心里没底怕挂科,这是很多准备报考【网电工证】的学员最真实的感受。尤其是在高压电工、低压电工等工种上,操作环节的容错率极低,一旦失误就可能直接被判定不合格。很多人因为担心挂科而放弃考… · 2026/11/12 0:00:56
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 20:19:29
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 19:22:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/11 17:15:20