Github Actions构建推送Docker镜像至DockerHub失败:target目录不存在
问题解决:Docker构建时找不到target目录
错误原因
你的GitHub Actions工作流跳过了Spring Boot项目构建步骤,直接执行Docker build。在全新的GitHub Actions运行环境中,克隆下来的代码没有target目录(该目录是执行Maven构建后才会生成的),因此Docker复制jar包时会报错找不到对应路径。
解决方案:在Actions中添加项目构建步骤
修改你的GitHub Actions配置,在checkout之后、Docker Build之前,补充Java环境配置和Maven构建命令:
name: Build & Deploy on: push: branches: [ master ] workflow_dispatch: jobs: build_and_push: name: Build & Push to DockerHub runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 # 新增:配置JDK 17环境 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin' cache: maven # 缓存Maven依赖,加速后续构建 # 新增:执行Maven构建,生成target目录与jar包 - name: Build Spring Boot project with Maven run: mvn clean package -DskipTests # 跳过测试可加快构建,需要测试可移除-DskipTests参数 - name: Login to DockerHub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} - name: Docker Build and Push to DockerHub uses: docker/build-push-action@v3 with: context: . push: true tags: markoblazhevski/kiii:latest
额外优化建议(可选)
为减小Docker镜像体积,可改用多阶段构建的Dockerfile,避免将构建环境的JDK与依赖打包到最终镜像中:
# 第一阶段:构建项目 FROM maven:3.8.6-openjdk-17 AS builder WORKDIR /app COPY pom.xml . COPY src ./src RUN mvn clean package -DskipTests # 第二阶段:生成轻量运行镜像 FROM openjdk:17-jdk-slim WORKDIR /app COPY --from=builder /app/target/KIII_Project_Final-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
使用多阶段构建后,你甚至可以在GitHub Actions中去掉Maven构建步骤,直接让Docker在构建过程中完成项目编译,但对于新手来说,优先采用前面的基础方案解决问题更直观。
内容的提问来源于stack exchange,提问作者Marko
相关产品推荐
相关产品推荐

