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

Docker部署Spring Boot报错:./mvnw未找到 求助

问题描述

尝试在Docker中运行Spring Boot应用失败,提示找不到./mvnw。

我的Dockerfile:

FROM eclipse-temurin:17-jdk-alpine
LABEL authors="Akkarawit"
COPY . ./backEndAPI
WORKDIR /backEndAPI
RUN chmod +x mvnw
RUN ./mvnw clean package
ENTRYPOINT ["java","-jar","/app.jar"]
EXPOSE 8080

构建错误日志:

[+] Building 8.7s (10/10) FINISHED docker:default
 => [internal] load build definition from Dockerfile 0.0s
 => => transferring dockerfile: 241B 0.0s 
 => [internal] load metadata for docker.io/library/eclipse-temurin:17-jdk-alpine 7.7s 
 => [auth] library/eclipse-temurin:pull token for registry-1.docker.io 0.0s 
 => [internal] load .dockerignore 0.0s
 => => transferring context: 2B 0.0s 
 => CACHED [1/5] FROM docker.io/library/eclipse-temurin:17-jdk-alpine@sha256:9909002ad26c12ac3be05d258f6424cd25620042ab682358a5dfbfe866885846 0.0s 
 => [internal] load build context 0.0s 
 => => transferring context: 1.67kB 0.0s 
 => [2/5] COPY . ./backEndAPI 0.0s 
 => [3/5] WORKDIR /backEndAPI 0.0s 
 => [4/5] RUN chmod +x mvnw 0.3s
 => ERROR [5/5] RUN ./mvnw clean package 0.5s
------
 > [5/5] RUN ./mvnw clean package:
0.434 /bin/sh: ./mvnw: not found
------
Dockerfile:6
--------------------
   4 |     WORKDIR /backEndAPI
   5 |     RUN chmod +x mvnw
   6 | >>> RUN ./mvnw clean package
   7 |     ENTRYPOINT ["java","-jar","/app.jar"]
   8 |     EXPOSE 8080
--------------------
ERROR: failed to solve: process "/bin/sh -c ./mvnw clean package" did not complete successfully: exit code: 127
解决办法

1. 检查本地是否存在mvnw相关文件

如果本地Spring Boot项目没有生成mvnw脚本和.mvn目录,Docker构建时自然找不到文件。

  • 执行命令生成:在项目根目录运行 mvn wrapper:wrapper,确保.mvn目录、mvnw、mvnw.cmd文件存在后再重新构建。

2. 排查.dockerignore规则

从构建上下文仅1.67kB的日志来看,大概率是.dockerignore忽略了mvn相关文件,导致COPY步骤没把文件复制进镜像。

  • 打开项目根目录的.dockerignore,删除忽略mvnw、mvnw.cmd、.mvn的规则。

3. 解决Alpine镜像缺少bash依赖问题

mvnw脚本默认依赖bash,但Alpine镜像仅自带sh,会导致脚本执行时报错“找不到文件”(实际是找不到bash解释器)。

  • 修改Dockerfile,先安装bash,同时修正jar包路径错误:
FROM eclipse-temurin:17-jdk-alpine
LABEL authors="Akkarawit"
# 安装bash依赖
RUN apk add --no-cache bash
COPY . ./backEndAPI
WORKDIR /backEndAPI
RUN chmod +x mvnw
# 可选:加-DskipTests跳过测试,加快构建
RUN ./mvnw clean package -DskipTests
# 修正jar包路径:mvn打包产物在target目录下
ENTRYPOINT ["java","-jar","/backEndAPI/target/*.jar"]
EXPOSE 8080

4. 更优方案:使用多阶段构建

多阶段构建能剥离构建依赖,大幅减小最终镜像体积:

# 第一阶段:构建jar包
FROM eclipse-temurin:17-jdk-alpine AS builder
RUN apk add --no-cache bash
WORKDIR /app
COPY . .
RUN chmod +x mvnw
RUN ./mvnw clean package -DskipTests

# 第二阶段:运行应用
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
# 从构建阶段复制jar包
COPY --from=builder /app/target/*.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]
EXPOSE 8080

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:45:56