Kubernetes部署Spring Boot应用报错:无法访问jarfile project-0.0.1.jar
修复步骤
1. 确认Jenkins构建后的实际JAR文件名
Jenkins构建生成的JAR文件名可能和你在CMD中硬编码的project-0.0.1.jar不一致,比如带有-SNAPSHOT后缀,或是因构建配置差异导致命名变化。
- 登录Jenkins服务器,进入项目构建工作目录,查看
build/libs/下的文件:ls -la /path/to/jenkins/workspace/your-project/build/libs/
2. 修改Dockerfile,避免硬编码JAR名
方案一:复制时统一重命名JAR
直接将构建后的JAR复制为固定名称,保证启动指令能匹配到:
# Use a Java runtime as the base image FROM openjdk:17-slim-buster # Set the working directory to /app WORKDIR /app # 复制JAR并统一命名为app.jar COPY build/libs/*.jar /app/app.jar # Expose the default port for the app EXPOSE 8888 # Start the app when the container launches CMD ["java", "-jar", "app.jar"]
方案二:用脚本动态查找可执行JAR
如果目录下存在多个JAR(如源码JAR和可执行JAR),通过脚本筛选启动:
# Use a Java runtime as the base image FROM openjdk:17-slim-buster # Set the working directory to /app WORKDIR /app # Copy the built JAR file into the container COPY build/libs/*.jar /app/ # 生成启动脚本,排除源码JAR并取第一个可执行JAR RUN echo '#!/bin/bash' > start.sh && \ echo 'JAR_FILE=$(find /app -name "*.jar" | grep -v "-sources.jar" | head -1)' >> start.sh && \ echo 'java -jar $JAR_FILE' >> start.sh && \ chmod +x start.sh # Expose the default port for the app EXPOSE 8888 # 执行启动脚本 CMD ["/app/start.sh"]
3. 验证Docker镜像内容
构建镜像后,本地启动临时容器查看/app目录,确认JAR文件存在:
docker run -it --rm your-image-tag ls -la /app/
4. 检查Helm Chart的挂载配置
如果Helm Chart中配置了volumeMounts挂载到/app目录,会覆盖容器内的JAR文件。检查values.yaml或模板文件,确保没有误挂载覆盖该目录。
5. 重新构建部署
修改Dockerfile后,通过Jenkins重新构建镜像并推送至仓库,再用Helm重新部署:
helm upgrade --install your-release-name ./your-chart-directory
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

