使用heroku container:push web推送镜像未更新,如何清除缓存?
解决Heroku Docker镜像部署后未生效的问题
嘿,我之前也踩过这个一模一样的坑!你遇到的情况确实常见,Heroku在容器部署流程里偶尔会出现新镜像没被正确加载的状况——不一定是“缓存镜像”本身,但确实有缓存相关的环节会拖后腿,下面是我亲测有效的解决步骤:
第一步:先确认新镜像真的推上去了
先别急着找缓存问题,先用命令检查Heroku上的镜像状态:
heroku container:list
看看web类型的镜像TAG是不是你刚推送的最新版本(比如有没有新的时间戳,或者你自定义的版本号)。如果TAG还是旧的,大概率是本地Docker缓存搞的鬼——你以为构建了新镜像,其实还是用的旧代码打包的。这时候重新推送时加上--no-cache参数绕过本地缓存:
heroku container:push web --no-cache
第二步:手动触发Release(最常见的修复点)
很多时候push成功后,Heroku不会自动触发应用的Release流程(也就是不会主动用新镜像替换旧实例),这时候手动执行:
heroku container:release web
这个命令相当于直接告诉Heroku:“别揪着旧镜像不放了,赶紧用刚推的新镜像重启应用!”
第三步:清除Heroku的构建缓存(前两步没用再试)
如果上面操作后还是没效果,可能是Heroku的远程构建缓存在搞怪,执行下面的命令清除应用的所有构建缓存:
heroku builds:cache:purge
清除完之后,重新执行heroku container:push web --no-cache和heroku container:release web,确保新镜像完全从头构建并部署。
第四步:兜底操作——强制重启应用
要是所有步骤都试了还是旧状态,直接强制重启整个应用,让所有旧实例下线,拉取新镜像启动:
heroku restart
额外排查小细节
- 确认你推送的是正确的进程类型:比如是不是误推成了
worker而不是web?检查你的Dockerfile和Heroku配置里的进程类型是否匹配。 - 如果用了自定义镜像标签:确保每次推送都更新标签,或者直接用默认的
latest标签(Heroku默认会拉取latest标签的镜像)。
一般来说,前两步就能解决90%的问题,我之前就是因为忘了手动Release折腾了好半天😂
内容的提问来源于stack exchange,提问作者HoangWeb
相关产品推荐
相关产品推荐

