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

构建Spring/React应用时Docker Build Context失败求助

Docker构建React+Spring项目报错:failed to solve : error from sender: context canceled

我尝试通过Docker容器构建React前端,并将其部署到Spring后端的静态资源目录中。作为Docker新手,我遇到了错误:failed to solve : error from sender: context canceled。该项目昨日还能正常构建,但今日执行docker compose up --build时持续出现此错误。

Dockerfile

# Build the React frontend
FROM node:latest as build-stage
WORKDIR /app
# 将package.json复制到app目录
COPY FrontEnd/package*.json /app/
RUN npm install
COPY FrontEnd/ /app/
RUN npm run build

# Build the Spring Boot application
FROM openjdk:17-jdk-slim as build-app
WORKDIR /app

# 安装xargs(Ubuntu使用apt包管理)
RUN apt-get update && apt-get install -y findutils && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY --from=build-stage /app/dist /app/src/main/resources/static
COPY . /app/
RUN chmod +x gradlew
RUN apt-get update && apt-get install -y dos2unix && dos2unix gradlew
RUN find ./ -name "*.java" | xargs dos2unix
RUN ./gradlew build -x test

# 准备运行时容器
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=build-app /app/build/libs/*.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

Docker Compose配置文件

version: "3.8"
services:
  postgres-dev-db:
    container_name: assignment5
    image: "postgres"
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: assignment5
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    ports:
      - "5455:5432"

  app:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - postgres-dev-db
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://postgres-dev-db:5432/assignment5
      SPRING_DATASOURCE_USERNAME: postgres
      SPRING_DATASOURCE_PASSWORD: postgres

执行docker build .的结果

docker build .   
[+] Building 9.9s (7/22)                                                                                                                                                                                                                                                                      docker:desktop-linux
 => [internal] load .dockerignore                                                                                                                                                                                                                                                                             0.0s
 => => transferring context: 2B                                                                                                                                                                                                                                                                               0.0s
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                                                                          0.0s
 => => transferring dockerfile: 908B                                                                                                                                                                                                                                                                          0.0s
 => [internal] load metadata for docker.io/library/openjdk:17-jdk-slim                                                                                                                                                                                                                                        0.6s
 => [internal] load metadata for docker.io/library/node:latest                                                                                                                                                                                                                                                0.6s
 => [build-stage 1/6] FROM docker.io/library/node:latest@sha256:0052410af98158173b17a26e0e2a46a3932095ac9a0ded660439a8ffae65b1e3                                                                                                                                                                              0.0s
 => [build-app  1/10] FROM docker.io/library/openjdk:17-jdk-slim@sha256:aaa3b3cb27e3e520b8f116863d0580c438ed55ecfa0bc126b41f68c3f62f9774                                                                                                                                                                      0.0s
 => CANCELED [internal] load build context                                                                                                                                                                                                                                                                    8.7s
 => => transferring context: 171.30MB                                                                                                                                                                                                                                                                         8.5s
ERROR: failed to solve: error from sender: context canceled

解决方法

1. 完善.dockerignore文件

从构建日志看,传输的构建上下文高达171MB,大概率是未排除冗余文件导致传输超时被取消。在项目根目录创建或修改.dockerignore文件,添加以下内容:

# 前端冗余文件
FrontEnd/node_modules
FrontEnd/build
FrontEnd/dist

# Spring冗余文件
.gradle
build
*.log

# 数据库数据目录
postgres-data

# Git相关文件
.git
.gitignore

2. 优化Dockerfile的文件复制逻辑

当前build-app阶段使用COPY . /app/会复制整个项目目录,包括前端的无用文件。可以改成只复制Spring项目必需的文件:

# 替换原有的COPY . /app/
COPY src/ /app/src/
COPY gradlew /app/
COPY build.gradle /app/
COPY settings.gradle /app/

3. 调整Docker资源配额

如果使用Docker Desktop,可能是内存或CPU分配不足导致构建超时。进入Docker Desktop设置 -> Resources,适当增加内存(建议4GB以上)和CPU核心数。

4. 清理Docker缓存

缓存损坏也可能引发异常,执行以下命令清理无用镜像、容器和缓存:

docker system prune -a

清理完成后重新执行构建命令。

5. 分步构建排查问题

拆分构建步骤,先单独构建前端阶段确认是否正常:

docker build --target build-stage .

若前端构建正常,再构建Spring阶段:

docker build --target build-app .

通过分步构建定位具体出错的环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:57:51