Docker Buildx使用--no-cache仍命中缓存的问题求助
解决Docker Buildx使用--no-cache仍命中缓存的问题
问题原因
Docker Buildx的--no-cache仅禁用本地构建缓存,但如果你的Buildx构建器配置了远程缓存(比如之前通过--cache-to/--cache-from绑定过远程存储),构建过程仍会从远程拉取缓存并复用,导致步骤标记为CACHED。
解决方案
方案1:构建时强制禁用所有缓存
在命令中添加--cache-to和--cache-from参数,指定空的本地缓存路径,彻底避免使用任何缓存:
docker buildx build --no-cache --pull \ --cache-to type=local,dest=/dev/null \ --cache-from type=local,src=/dev/null \ --build-arg VERSION=4.0.0 \ --build-arg ONEPUB_TOKEN=xxxxx= \ -t onepub/xxx:4.0.0 \ -f vaadin.dockerfile .
方案2:使用临时构建器实例
创建一个全新的临时Buildx构建器,完全隔离现有缓存配置,构建完成后可删除:
# 创建并使用临时构建器 docker buildx create --use --name temp-builder # 执行无缓存构建 docker buildx build --no-cache --pull \ --build-arg VERSION=4.0.0 \ --build-arg ONEPUB_TOKEN=xxxxx= \ -t onepub/xxx:4.0.0 \ -f vaadin.dockerfile . # (可选)删除临时构建器 docker buildx rm temp-builder
方案3:检查基础镜像拉取状态
如果基础镜像步骤显示CACHED,确认--pull参数是否生效:
- 若基础镜像(如
FROM ubuntu:22.04)本身没有更新,Docker会复用本地已拉取的最新镜像层,这属于正常行为,并非缓存问题。 - 若需要强制重新拉取基础镜像并重新构建该层,可确保基础镜像标签为
latest或明确指定版本号,同时结合--pull参数。
内容的提问来源于stack exchange,提问作者Brett Sutton
相关产品推荐
相关产品推荐

