ARM自托管运行器执行Docker build-push-action时提示iidfile缺失
解决GitHub Actions自托管ARM运行器上Docker Buildx的文件缺失错误
问题描述
将GitHub Actions工作流从ubuntu-latest切换到ARM架构的自托管运行器后,执行Docker构建推送步骤时出现如下错误:
Error: buildx failed with: ERROR: open /tmp/docker-build-push-m9gSaF/iidfile: no such file or directory
检查运行时的/tmp目录,发现docker-build-push相关子目录未生成任何内容。对应的工作流配置如下:
name: Build on: push: branches: - 'main' jobs: docker: runs-on: self-hosted steps: - name: Checkout uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Login to GitHub Container Registry uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push uses: docker/build-push-action@v3 with: context: frontend file: frontend/Dockerfile platforms: linux/arm64 push: true tags: ghcr.io/langaracpsc/langaracpsc-next:latest
工作流运行实例:https://github.com/langaracpsc/langaracpsc-next/actions/runs/6101537965/job/16558257594
解决办法
1. 更新Docker Buildx版本
ARM环境下部分旧版Buildx存在路径兼容性问题,直接在自托管运行器上执行命令更新:
docker buildx install
或者在工作流中强制使用最新版Buildx,修改setup-buildx-action步骤:
- name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 with: version: latest
2. 修复/tmp目录权限
自托管运行器用户需要对/tmp目录有完整的读写权限,执行以下命令修复:
sudo chmod 1777 /tmp
也可以在工作流中添加前置检查步骤:
- name: Ensure /tmp has correct permissions run: | ls -ld /tmp sudo chmod 1777 /tmp || true
3. 指定自定义Buildx临时目录
避免系统/tmp的自动清理或权限限制干扰,在工作流中创建自定义临时目录并指定给Buildx:
- name: Prepare custom buildx temp directory run: | mkdir -p /home/runner/buildx-tmp chmod 777 /home/runner/buildx-tmp - name: Build and push uses: docker/build-push-action@v3 with: context: frontend file: frontend/Dockerfile platforms: linux/arm64 push: true tags: ghcr.io/langaracpsc/langaracpsc-next:latest build-args: | BUILDX_TMPDIR=/home/runner/buildx-tmp
4. 启用Docker Buildkit特性
确保Docker daemon开启Buildkit支持,编辑/etc/docker/daemon.json(若不存在则创建):
{ "features": { "buildkit": true } }
然后重启Docker服务:
sudo systemctl restart docker
内容的提问来源于stack exchange,提问作者Highfire1
相关产品推荐
相关产品推荐

