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

Windows11下Docker-Compose启动Spring Boot报错:找不到./mvnw

问题:Windows 11下Docker Compose启动Spring Boot应用时找不到./mvnw

我开发了一个Spring Boot应用,正在学习Docker,使用Windows 11系统。执行docker-compose up命令时出现找不到./mvnw的错误,但另外两位开发者(一位Linux用户、一位Windows用户)使用相同配置可正常启动应用。我猜测可能是CRLF与LF的换行符转换问题,当前本地文件权限如下:

// ls -l
-rwxr-xr-x 1 olivi 197121 11598 Apr 16 17:53 mvnw
-rw-r--r-- 1 olivi 197121  7797 Dec 22 16:16 mvnw.cmd

附当前使用的配置文件:

docker-compose.yaml 配置

version: '3.8'

services:
  db-mysql-mtgbox:
    container_name: db-mysql-mtgbox
    image: mysql
    restart: always
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_ROOT_PASSWORD: 'qwerty'
    ports:
      - ${MYSQL_PORT}
    volumes:
      - db-mysql-mtgbox:/var/lib/mysql
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - ${APP_PORT}
    environment:
      - SPRING_DATASOURCE_URL=${APP_SPRING_DATASOURCE_URL}
      - SPRING_DATASOURCE_USERNAME=${APP_SPRING_DATASOURCE_USERNAME}
      - SPRING_DATASOURCE_PASSWORD=${APP_SPRING_DATASOURCE_PASSWORD}
      - SPRING_JPA_HIBERNATE_DDL_AUTO=${APP_SPRING_JPA_HIBERNATE_DDL_AUTO}
      - JWT_SECRETKEY= ${JWT_SECRETKEY}
      - JWT_TOKEN_VALIDITYTIMEINMINUTE= ${JWT_TOKEN_VALIDITYTIMEINMINUTE}
    depends_on:
      - db-mysql-mtgbox
    volumes:
      - ..:/app
      - ~/.m2:/root/.m2

volumes:
  db-mysql-mtgbox:

Dockerfile 配置

FROM amazoncorretto:21
WORKDIR /app
CMD [ "./mvnw", "spring-boot:run" ]
解决方案

1. 修复换行符问题

容器运行在Linux环境,mvnw脚本需要LF换行符,Windows默认使用CRLF,会导致脚本执行失败:

  • 项目根目录执行Git配置,禁止自动转换换行符:git config core.autocrlf false
  • 转换mvnw的换行符:可以用dos2unix mvnw命令(需先安装dos2unix工具),或用Notepad++打开mvnw,在右下角切换换行符为LF后保存。

2. 确保容器内mvnw的执行权限

即使本地文件有执行权限,挂载到容器后可能丢失,修改Dockerfile添加权限设置:

FROM amazoncorretto:21
WORKDIR /app
RUN chmod +x ./mvnw
CMD [ "./mvnw", "spring-boot:run" ]

3. 检查挂载路径正确性

docker-compose中- ..:/app的挂载路径可能导致mvnw不在容器的/app目录下,确认项目根目录结构后,可将挂载路径改为- .:/app(如果当前目录就是项目根目录)。

4. 替代方案:直接使用容器内Maven

如果不想处理mvnw的问题,可在Dockerfile中安装Maven,直接用mvn命令启动:

FROM amazoncorretto:21
RUN yum install -y maven
WORKDIR /app
CMD [ "mvn", "spring-boot:run" ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:30:04