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

Bitbucket Pipeline构建报错:COPY未指定源文件,本地构建正常求排查

Bitbucket Pipeline构建Docker镜像时COPY失败,本地构建正常

问题描述

执行Bitbucket Pipeline时触发报错:

COPY ./fronted/package*.json ./
COPY failed: no source files were specified

但本地执行以下构建命令可成功完成:

root@project:/frontend# docker build -f docker/Dockerfile -t frontend:6.0 .

仓库文件结构

|-- fronted
|   |-- package.json
|   |-- other frontend files
|-- docker
|   |-- Dockerfile
|   |-- nginx.conf
|-- bitbucket-pipelines.yml

相关配置文件

Dockerfile内容

FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# Step 2: Create Nginx Server
FROM nginx:stable-alpine as production-stage
COPY docker/nginx.conf /etc/nginx/nginx.conf

COPY --from=build-stage /app/dist /usr/share/nginx/html

CMD ["nginx", "-g", "daemon off;"]

bitbucket-pipelines.yml内容

image: atlassian/default-image:3

pipelines:
  branches:
    master:          
    - step:
        runs-on: 
          - 'self.hosted'
          - 'linux'
        name: Build and Save image
        script:
          - echo "Building Docker image"
          - export DOCKER_HOST=tcp://127.0.0.1:2375
          - docker login docker-c2.comp.net -u admin -p $NEXUS_PASSWORD
          - docker build -f frontend/docker/Dockerfile -t docker-c2.comp.net/support-center-netcore/fronted-support-center-netcore-kz:v1.$BITBUCKET_BUILD_NUMBER .
          # Push the Docker image to the container registry2
          - docker push docker-c2.comp.net/support-center-netcore/fronted-support-center-netcore-kz:v1.$BITBUCKET_BUILD_NUMBER

问题原因

  1. 构建上下文与文件路径不匹配:
    本地构建时,你是在/frontend目录(对应仓库的fronted目录)执行命令,构建上下文为当前目录,Dockerfile中的COPY package*.json ./能直接找到该目录下的文件;但Bitbucket Pipeline中构建上下文是仓库根目录,Dockerfile里的相对路径会在根目录查找package*.json,而实际文件在fronted子目录下,导致找不到文件报错。
  2. 目录拼写错误:Pipeline构建命令中指定的Dockerfile路径是frontend/docker/Dockerfile,但仓库实际目录名为fronted(少一个字母n),且Dockerfile实际在根目录的docker子目录下,路径完全不匹配。

解决方法

方法1:修改Dockerfile中的路径,适配根目录构建上下文

调整Dockerfile里的COPY命令,指定文件所在的fronted子目录:

FROM node:lts-alpine as build-stage
WORKDIR /app
# 从根目录的fronted子目录复制package文件
COPY fronted/package*.json ./
RUN npm install
# 复制fronted目录下的所有内容到工作目录
COPY fronted/ .
RUN npm run build

# Step 2: Create Nginx Server
FROM nginx:stable-alpine as production-stage
# 从根目录的docker子目录复制配置文件
COPY docker/nginx.conf /etc/nginx/nginx.conf

COPY --from=build-stage /app/dist /usr/share/nginx/html

CMD ["nginx", "-g", "daemon off;"]

方法2:调整Pipeline构建命令,切换到fronted目录执行

修改Pipeline脚本,进入fronted目录后再执行构建,此时构建上下文为fronted目录,和本地环境一致:

script:
  - echo "Building Docker image"
  - export DOCKER_HOST=tcp://127.0.0.1:2375
  - docker login docker-c2.comp.net -u admin -p $NEXUS_PASSWORD
  # 切换到fronted目录,指定上层目录的Dockerfile
  - cd fronted && docker build -f ../docker/Dockerfile -t docker-c2.comp.net/support-center-netcore/fronted-support-center-netcore-kz:v1.$BITBUCKET_BUILD_NUMBER .
  - docker push docker-c2.comp.net/support-center-netcore/fronted-support-center-netcore-kz:v1.$BITBUCKET_BUILD_NUMBER

必做:修正目录拼写错误

无论采用哪种方法,都要将Pipeline构建命令中的frontend/docker/Dockerfile改为正确路径:如果用方法1则改为docker/Dockerfile,如果用方法2则改为../docker/Dockerfile,确保路径完全匹配仓库结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:57:17