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

Bitbucket Pipeline部署Spring Boot应用至AWS ECR时Docker构建报错求助

解决Bitbucket Pipelines构建Docker镜像时找不到target/app.jar的问题

我之前搭建过Bitbucket Pipelines + AWS ECR的Spring Boot容器化流水线,刚好碰到过和你一模一样的问题,给你几个具体的解决思路:

核心问题分析

你遇到的COPY failed: file not found错误,主要源于两个关键点:

  1. Bitbucket Pipelines的每个Step都是独立运行的容器,默认不会共享文件,第一个Step生成的target/app.jar无法被第二个Step直接访问到。
  2. Docker构建时的上下文路径配置错误,导致Docker在指定目录下找不到jar包。

具体解决方案

1. 配置Step间的文件共享(Artifacts)

首先需要让第一个Step把构建好的jar包传递给第二个Step,这就要用到Bitbucket的artifacts功能。修改你的Pipeline配置,在第一个Step里添加artifacts字段:

- step:
    name: Clean install
    script:
      - cd path.to.file
      - mvn clean install -DskipTests
    artifacts:
      - path.to.file/target/** # 将target目录下所有文件作为产物传递到下一个Step

这个配置会把第一个Step中生成的target目录完整保留,让后续Step可以正常访问到里面的jar包。

2. 调整Docker构建的上下文路径

第二个Step中,你当前是进入Dockerfile所在目录执行docker build .,此时Docker的构建上下文是这个目录,而你的jar包在path.to.file/target下,所以Docker找不到它。有两种调整方式:

方案A:指定构建上下文为项目根目录,同时指定Dockerfile路径

如果你的path.to.file(Spring Boot项目目录)和path.to.dockerfile(Dockerfile所在目录)是同级的,你可以在第二个Step里执行:

# 不需要进入Dockerfile目录,直接在项目根目录执行构建
docker build -t app-devtest -f path.to.dockerfile/Dockerfile .
  • .表示将项目根目录作为Docker构建上下文,这样Docker就能找到target/app.jar(因为artifacts已经把target目录传过来了)。
  • -f path.to.dockerfile/Dockerfile指定Dockerfile的具体位置。

方案B:复制jar包到Dockerfile所在目录

如果你不想改变构建上下文路径,也可以把artifacts中的jar包复制到Dockerfile所在目录,再执行构建:

cd path.to.dockerfile
# 根据实际相对路径调整,把jar包复制到当前目录
cp ../path.to.file/target/app.jar .
docker build -t app-devtest .

3. 检查.dockerignore文件

最后别忘了检查项目根目录的.dockerignore文件,如果里面有target相关的排除规则,Docker构建时会忽略这个目录,也会导致找不到jar包。可以暂时注释掉这条规则测试:

# 注释掉这条规则
# target/

修改后的完整Pipeline配置示例

这里用方案A的配置,你可以直接参考:

image: maven:3.6.3
pipelines:
  default:
    - step:
        name: Clean install
        script:
          - cd path.to.file
          - mvn clean install -DskipTests
        artifacts:
          - path.to.file/target/**
    - step:
        name: Push to ECR
        services:
          - docker
        script:
          # 使用项目根目录作为构建上下文,指定Dockerfile路径
          - docker build -t app-devtest -f path.to.dockerfile/Dockerfile .
          # 推送镜像到AWS ECR
          - pipe: atlassian/aws-ecr-push-image:1.4.2
            variables:
              AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
              AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
              AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
              IMAGE_NAME: app-devtest
              TAGS: 'latest'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 21:07:48