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

Docker构建Spring Boot应用报错:./gradlew: not found 求助

Docker构建Spring Boot应用报错:/bin/sh: 1: ./gradlew: not found

构建命令

docker build -t myapp:latest -f Dockerfile2 .

自定义Dockerfile内容

FROM adoptopenjdk/openjdk11 as builder

WORKDIR /builder

COPY gradlew ./
COPY gradle ./gradle
COPY build.gradle ./
COPY settings.gradle ./

COPY src ./src

RUN chmod +x ./gradlew

RUN ./gradlew bootJar

FROM adoptopenjdk/openjdk11 as runner

WORKDIR /app

COPY --from=builder /builder/build/libs/app.jar ./

EXPOSE 8080

CMD ["java","-jar","-Dspring.profiles.active=local","app.jar"]

完整报错信息

[+] Building 0.4s (14/15)                                                                                                                                              docker:default
 => [internal] load build definition from Dockerfile2                                                                                                                            0.0s
 => => transferring dockerfile: 450B                                                                                                                                             0.0s 
 => [internal] load .dockerignore                                                                                                                                                0.0s 
 => => transferring context: 2B                                                                                                                                                  0.0s 
 => [internal] load metadata for docker.io/adoptopenjdk/openjdk11:latest                                                                                                         0.0s 
 => [internal] load build context                                                                                                                                                0.0s 
 => => transferring context: 18.35kB                                                                                                                                             0.0s 
 => [builder 1/9] FROM docker.io/adoptopenjdk/openjdk11                                                                                                                          0.0s 
 => CACHED [runner 2/3] WORKDIR /app                                                                                                                                             0.0s 
 => CACHED [builder 2/9] WORKDIR /builder                                                                                                                                        0.0s
 => CACHED [builder 3/9] COPY gradlew ./                                                                                                                                         0.0s 
 => CACHED [builder 4/9] COPY gradle ./gradle                                                                                                                                    0.0s 
 => CACHED [builder 5/9] COPY build.gradle ./                                                                                                                                    0.0s 
 => CACHED [builder 6/9] COPY settings.gradle ./                                                                                                                                 0.0s 
 => CACHED [builder 7/9] COPY src ./src                                                                                                                                          0.0s 
 => CACHED [builder 8/9] RUN chmod +x ./gradlew                                                                                                                                  0.0s 
 => ERROR [builder 9/9] RUN ./gradlew bootJar                                                                                                                                    0.3s 
------
 > [builder 9/9] RUN ./gradlew bootJar:
0.262 /bin/sh: 1: ./gradlew: not found
------
Dockerfile2:14
--------------------
  12 |     RUN chmod +x ./gradlew
  13 |
  14 | >>> RUN ./gradlew bootJar
  15 |
  16 |     FROM adoptopenjdk/openjdk11  as runner
--------------------
ERROR: failed to solve: process "/bin/sh -c ./gradlew bootJar" did not complete successfully: exit code: 127

View build details: docker-desktop://dashboard/build/default/default/ut88drrrrlzvp10e5pnr6u1a4

已尝试的排查步骤

  • 确认Dockerfile中已正确复制gradlew文件并设置执行权限
  • 尝试在Docker镜像内先执行chmod +x gradlew再运行gradlew
  • 尝试移除gradlew以观察构建过程变化

解决方案

1. 修复gradlew换行符(Windows环境常见问题)

Windows系统默认使用CRLF换行,而Linux容器需要LF格式,这会导致容器无法正确识别脚本开头的#!/bin/bash路径。

  • 用git修复:
git config core.autocrlf false
git rm --cached gradlew
git add gradlew
  • 或用文本编辑器(如VS Code)修改:打开gradlew,右下角点击CRLF切换为LF,保存后重新构建。

2. 检查.dockerignore配置

如果.dockerignore文件中包含gradlew或匹配它的规则,会导致COPY命令无法将文件复制到容器中。

  • 打开.dockerignore,删除包含gradlew的行,或者添加!gradlew排除忽略规则。

3. 确认gradlew存在于构建上下文

  • 检查本地项目根目录是否有gradlew文件,没有的话执行gradle wrapper生成。
  • 确保构建命令是在项目根目录执行(即命令末尾的.指向项目根),否则调整COPY命令的源路径。

4. 替换为官方Gradle镜像构建(可选优化)

使用官方Gradle镜像避免环境差异,修改Dockerfile如下:

FROM gradle:7.6-jdk11 as builder

WORKDIR /builder

COPY --chown=gradle:gradle gradlew ./
COPY --chown=gradle:gradle gradle ./gradle
COPY --chown=gradle:gradle build.gradle ./
COPY --chown=gradle:gradle settings.gradle ./
COPY --chown=gradle:gradle src ./src

RUN ./gradlew bootJar

FROM adoptopenjdk/openjdk11 as runner

WORKDIR /app

COPY --from=builder /builder/build/libs/app.jar ./

EXPOSE 8080

CMD ["java","-jar","-Dspring.profiles.active=local","app.jar"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:34:59