使用Docker Compose部署Spring Boot应用时出现no main manifest attribute错误
问题排查与修复方案
1. POM配置错误
(1)启动类全限定名拼写错误
你的<start-class>属性开头少了字母c,正确配置应为:
<start-class>com.springlearn.learnspringdb.UsermanagementApplication</start-class>
(2)重复配置Spring Boot Maven插件
你在<build><plugins>中重复声明了两次spring-boot-maven-plugin,会导致打包逻辑冲突,合并为单个配置即可:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${project.parent.version}</version> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
2. Dockerfile缺失/配置错误
项目根目录需添加Dockerfile,确保正确构建可执行Jar并运行:
# 构建阶段:生成可执行Jar FROM maven:3.8.5-openjdk-17 AS builder WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY src ./src RUN mvn clean package -DskipTests # 运行阶段:启动应用 FROM openjdk:17-jdk-slim WORKDIR /app COPY --from=builder /app/target/learnspringdb-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java", "-jar", "app.jar"]
注意:Jar包名称需与
target目录下生成的文件一致,若有差异请自行修改。
3. Docker Compose配置错误
(1)MySQL端口映射错误
MySQL容器默认端口为3306,你的配置写错为3036,修正后:
ports: - "3307:3306"
(2)Spring数据源URL错误
容器内不能用localhost访问MySQL服务,需使用Docker Compose的服务名mysql,同时补充必要连接参数:
environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/user_management?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true SPRING_DATASOURCE_USERNAME: root SPRING_DATASOURCE_PASSWORD: password
(3)MySQL容器自动创建目标数据库
给MySQL服务添加MYSQL_DATABASE环境变量,启动时自动创建user_management数据库:
mysql: image: mysql:8.1.0 ports: - "3307:3306" environment: MYSQL_ROOT_USER: root MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: user_management
4. 验证步骤
- 清理旧构建产物:
mvn clean - 重新打包:
mvn package -DskipTests - 启动容器:
docker-compose up --build
内容的提问来源于stack exchange,提问作者algouser
相关产品推荐
相关产品推荐

