GitHub Actions构建镜像报buildx cache export不支持docker driver
问题根因
报错触发的直接原因是工作流中使用了Buildx的本地缓存导入/导出能力,但没有提前初始化支持该功能的Buildx构建器:GitHub Actions运行环境默认的docker驱动不支持缓存导出特性,必须切换到docker-container驱动才能使用该功能。
除此之外现有配置还存在多处拼写、路径、配置逻辑错误,即使修复构建器问题也会出现后续执行失败。
修复方案
按以下顺序修改工作流配置即可:
- 补充Buildx初始化步骤
在登录Docker Hub的步骤之前,添加官方的Buildx配置步骤,该步骤会自动创建基于docker-container驱动的构建器并设为默认,无需手动执行docker buildx create --use命令:- name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - 修正缓存参数格式错误
原有cache-from配置中, src多了一个多余空格,会导致Buildx参数解析失败,修正后的缓存配置为:cache-from: type=local,src=/tmp/.buildx-cache cache-to: type=local,dest=/tmp/.buildx-cache注意:本地缓存存储在作业临时目录中,作业结束后会自动销毁,无法跨作业运行复用。如果要实现真正的构建缓存加速,可将缓存配置替换为GitHub Actions原生缓存方案,配置更简单且跨运行生效:
cache-from: type=gha cache-to: type=gha,mode=max - 修复其余配置错误
- 修正Python安装步骤:原有
actions/setup-python@v2版本过旧,且未指定Python版本,会导致安装的Python版本不符合预期,替换为v4版本并明确指定3.9版本:- name: install python version 3.9 uses: actions/setup-python@v4 with: python-version: '3.9' - 修正Docker登录配置:不要硬编码Docker Hub的访问令牌,提前在仓库Secrets中配置DOCKERHUB_USERNAME和DOCKERHUB_TOKEN字段,替换硬编码的明文配置,同时将login-action升级到稳定的v2版本:
- name: login to docker-hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - 修正文件路径匹配问题:现有安装依赖步骤读取的是
backend/requirements.txt,但Dockerfile中复制的是根目录下的requirements.txt,二者路径不匹配,需要根据你的项目实际目录结构调整:如果Dockerfile在backend目录下,就把build-push步骤的context改为./backend、file改为./backend/Dockerfile;如果Dockerfile在仓库根目录,就把安装依赖的路径改为根目录下的requirements.txt。 - 修正镜像摘要输出的拼写错误:原有配置中输出变量写为
diget,正确变量名为digest,修正后步骤为:- name: Image digest run: echo ${{ steps.docker_build.outputs.digest }}
- 修正Python安装步骤:原有
验证说明
完成以上修改后重新触发工作流,Buildx会使用支持缓存的docker-container驱动完成构建,不会再出现驱动不支持缓存导出的报错,镜像可正常推送到Docker Hub。
内容的提问来源于stack exchange,提问作者Pankesh Patel
相关产品推荐
相关产品推荐

