You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions推送Docker时Buildx报No such file or directory错误求助

问题描述

配置GitHub Actions实现代码推送自动构建并推送Docker镜像时,工作流执行到镜像推送步骤抛出如下错误:

Error: buildx failed with: error: failed to solve: failed to compute cache key: failed to walk /var/lib/docker/tmp/buildkit-mount1164878607/target: lstat /var/lib/docker/tmp/buildkit-mount1164878607/target: no such file or directory

排查确认报错由Docker无法访问Dockerfile中指定的文件导致:完全移除COPY指令时镜像可推送成功,但构建出的镜像无法正常运行。项目使用maven-compiler-plugin与maven-shade-plugin完成打包,pom.xml配置已核对无误。

现有GitHub工作流配置

name: Docker

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v2
      
    - name: Set up JDK
      uses: actions/setup-java@v3.3.0
      with:
        java-version: 18
        distribution: adopt

    - name: Build with Maven
      run: mvn clean package
      
    - name: Login to DockerHub
      uses: docker/login-action@v2.0.0
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_TOKEN }}

    - name: Build and push Docker images
      uses: docker/build-push-action@v3.0.0
      with:
        push: true
        tags: sudden/discordbot:latest

现有Dockerfile配置

FROM openjdk:11-jdk-slim
WORKDIR /tmp
COPY target/discordbot-1.0-SNAPSHOT-shaded.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

已尝试排查方案

  • 尝试复制src目录下的其他任意文件
  • 修改jar包文件名与对应引用路径
  • 调整WORKDIR配置参数
  • 修改工作流中Docker的context等相关配置项
问题根因

docker/build-push-action@v3.0.0默认使用buildx构建,默认不会将当前运行器上前置步骤(也就是Maven打包步骤)生成的target目录纳入Docker构建上下文,Docker构建过程中根本访问不到Maven打出来的jar包,才会抛出路径不存在的错误。移除COPY指令后不需要读取上下文内的本地文件,自然可以构建成功,但镜像里没有业务jar包无法运行。

修复方案

按以下内容调整工作流配置即可解决:

  1. 显式添加docker/setup-buildx-action步骤初始化buildx环境,不要依赖默认隐式配置
  2. 升级使用的各Action到稳定版本,避免旧版本默认配置的兼容问题
  3. 显式指定Docker构建上下文为项目根目录,确保buildx可以读取到Maven生成的target目录内容
  4. 增加校验步骤确认Maven生成的jar包路径和文件名和Dockerfile中配置的一致,避免打包配置不匹配的问题

修复后的完整工作流配置如下:

name: Docker

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v3
      
    - name: Set up JDK
      uses: actions/setup-java@v3
      with:
        java-version: '18'
        distribution: 'adopt'

    - name: Build with Maven
      run: mvn clean package

    - name: Verify build output
      run: ls -la target/

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v2

    - name: Login to DockerHub
      uses: docker/login-action@v2
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_TOKEN }}

    - name: Build and push Docker images
      uses: docker/build-push-action@v4
      with:
        context: .
        push: true
        tags: sudden/discordbot:latest

如果调整后仍然报错,核对maven-shade-plugin中配置的finalName字段,确认target目录下生成的jar包全名和Dockerfile里COPY指令写的discordbot-1.0-SNAPSHOT-shaded.jar完全一致即可。

内容的提问来源于stack exchange,提问作者Nathan Yearout

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:00:58