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

Docker部署Gradle项目报错:./gradlew: not found 求助

解决Docker容器启动时./gradlew: not found的问题

看起来你遇到的问题主要来自几个常见的Docker配置坑,我帮你一步步梳理解决:

1. 先解决带空格的目录问题(核心)

你的源码目录叫Khatabook Account,带空格的路径在Docker中很容易触发路径解析错误——容器里的shell会把空格当成分隔符,导致它找不到./gradlew所在的正确目录。

解决步骤:

  • 把本地源码目录重命名为KhatabookAccount(去掉空格)
  • 修改你的配置文件:
    • Dockerfile里的WORKDIR改成:WORKDIR /KhatabookAccount
    • docker-compose.yml里的volumes改成:- ./:/KhatabookAccount

2. 修复gradlew的权限和执行命令

你之前尝试的CMD chmod +x ./gradlew run写法不对——shell会把这整个字符串当成一个命令,自然找不到。而且最好在构建镜像时就设置好权限,不用每次启动容器都重复执行。

更新你的Dockerfile:

FROM openjdk:8-jdk-alpine
RUN apk add --no-cache bash
WORKDIR /KhatabookAccount
# 先复制gradlew和gradle目录到容器
COPY ./gradlew .
COPY ./gradle ./gradle
# 给gradlew添加可执行权限
RUN chmod +x ./gradlew
# 用exec格式的CMD更可靠,避免shell解析问题
CMD ["./gradlew", "run"]

3. 排查Windows行尾符问题(可选但重要)

如果你的项目是在Windows系统下开发的,gradlew文件的行尾符可能是Windows的CRLF格式,而Alpine Linux需要的是LF格式,这也会导致not found错误。

如果是这种情况,在Dockerfile里添加行尾符转换的步骤:

FROM openjdk:8-jdk-alpine
# 额外安装dos2unix工具
RUN apk add --no-cache bash dos2unix
WORKDIR /KhatabookAccount
COPY ./gradlew .
COPY ./gradle ./gradle
# 转换行尾符为Linux格式
RUN dos2unix ./gradlew
RUN chmod +x ./gradlew
CMD ["./gradlew", "run"]

4. 更新docker-compose.yml

修改后的docker-compose.yml应该是这样:

version: "3.6"
services:
  app:
    build: ./
    container_name: khatabook-app
    volumes:
      - ./:/KhatabookAccount
    ports:
      - 8080:8080
    expose:
      - 8080

最后重新构建启动

执行以下命令清理旧容器并重新构建:

docker-compose down
docker-compose up --build

这样应该就能解决容器启动时找不到gradlew的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:07:57