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
- Dockerfile里的
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
相关产品推荐
相关产品推荐

