Spring Boot Docker部署问题:docker-compose up -d执行失败(mvnw未找到)
问题
执行docker-compose up -d部署Spring Boot应用时出现以下错误:
=> ERROR [build 4/6] RUN ./mvnw dependency:resolve 0.9s ------ > [build 4/6] RUN ./mvnw dependency:resolve: #0 0.230 /bin/sh: 1: ./mvnw: not found ------ failed to solve: executor failed running [/bin/sh -c ./mvnw dependency:resolve]: exit code: 127
相关配置文件
Dockerfile
# Stage 1: Build stage FROM openjdk:17-jdk-slim AS build # Copy Maven files for dependency resolution COPY pom.xml mvnw ./ COPY .mvn .mvn # Resolve project dependencies RUN ./mvnw dependency:resolve # Copy application source code COPY src src # Package the application RUN ./mvnw package # Stage 2: Run stage FROM openjdk:17-jdk-slim # Set working directory WORKDIR ays-be # Copy the JAR file from the build stage COPY --from=build target/*.jar /app/ays-be.jar # Expose port 9790 EXPOSE 9790 # Set the entrypoint command for running the application ENTRYPOINT ["java", "-jar", "/app/ays-be.jar"]
docker-compose.yml
version: "3.9" services: mysql: image: mysql:8.0 container_name: ays-db environment: MYSQL_DATABASE: ays MYSQL_USER: ays MYSQL_PASSWORD: ayspass MYSQL_ROOT_PASSWORD: ayspass MYSQL_ROOT_HOST: '%' MYSQL_PORT: 3306 volumes: - db-data:/var/lib/mysql ports: - "3306:3306" networks: - ays ays-be: build: context: . dockerfile: Dockerfile container_name: ays-be ports: - "9790:9790" depends_on: - mysql environment: - SPRING_PROFILES_ACTIVE=development - AYS_DB_USERNAME=ays - AYS_DB_PASSWORD=ayspass - AYS_DB_URL=jdbc:mysql://mysql:3306/ays networks: - ays # Volumes volumes: db-data: networks: ays:
解决方法
1. 确认本地存在Maven wrapper文件
检查项目根目录下是否有mvnw脚本和.mvn文件夹,若缺失,执行以下命令生成(需本地安装Maven):
mvn wrapper:wrapper
2. 给mvnw添加执行权限
容器内默认没有mvnw的执行权限,修改Dockerfile构建阶段,在执行mvnw命令前添加权限设置:
# Copy Maven files for dependency resolution COPY pom.xml mvnw ./ COPY .mvn .mvn # 赋予mvnw执行权限 RUN chmod +x ./mvnw # Resolve project dependencies RUN ./mvnw dependency:resolve
3. 检查文件复制路径
确保docker-compose.yml中build.context: .指向的是项目根目录(即包含pom.xml、mvnw的目录),若Dockerfile不在根目录,需调整context路径或复制命令。
4. 修复Windows换行符问题
如果是Windows环境开发,mvnw脚本的换行符可能是CRLF,而Linux容器仅识别LF:
- 用VS Code等编辑器打开
mvnw,右下角切换换行符为LF - 或设置Git自动转换:
git config --global core.autocrlf input
内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu
相关产品推荐
相关产品推荐

