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

