当前位置: 首页 > news >正文

容器部署springboot项目--入门

1. 环境准备

确认安装docker desktop,参考docker desktop安装

2. 项目准备

2.1 springboot项目

完成springboot项目,确保可以打包为可执行jar
pom.xml 关键配置

 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

项目打包

# Maven 项目
mvn clean package -DskipTests# Gradle 项目
./gradlew clean build -x test

2.2 创建 Dockerfile文件

# 使用基础的 Java 镜像
FROM eclipse-temurin:21-jdk-alpine# 设置工作目录
WORKDIR /app
# 将打包好的 JAR 文件复制到容器中
COPY target/*.jar /app/app.jar# 暴露 Spring Boot 应用的端口
EXPOSE 8080# 运行 Spring Boot 应用
CMD ["java", "-jar", "app.jar"]

2.3 构建 Docker 镜像

docker build -t my-spring-app:1.0.0 .

2.4 运行docker镜像

docker run -d \--name spring-app \-p 8080:8080 \my-spring-app:1.0.0

3. 调试

3.1 进入容器调试:

docker exec -it spring-app sh

3.2 查看应用日志:

docker logs --tail 100 -f spring-app

3.3 端口检查:

# 容器内部
docker exec spring-app nc -zv localhost 8080# 宿主机
curl http://localhost:8080/actuator/health

4. 常见问题解决

4.1 Spring Boot 应用在打包/启动阶段无法连接 Docker 容器中的 Redis

  1. 打包时不连接 Redis,运行时通过环境变量注入真实地址。其他类似容器服务也可以
# application.yml
spring:redis:host: ${REDIS_HOST:localhost}  # 默认localhost,可由环境变量覆盖port: ${REDIS_PORT:6379}
  1. 启动容器时确保java项目和redis服务在同一个网络,可以参考docker 容器通信
docker run -d \--name spring-app \-p 8080:8080 \-e REDIS_HOST=redis-server \  # Docker 容器名-e REDIS_PORT=6379 \--net subnetwork \--ip 192.168.0.5  \my-spring-app:1.0.0

4.2 项目打包后未包含直接引用的本地 JAR 文件

项目结构:

project-root/
├── libs/           # 存放自定义JAR
│   └── custom-lib-1.0.0.jar
├── src/
└── pom.xml

更新 pom.xml 文件配置,在build->plugins-plugin节点增加 configuration 节点

<dependencies><!-- 自定义依赖 --><dependency><groupId>com.example</groupId><artifactId>custom-lib</artifactId><version>1.0.0</version><scope>system</scope><systemPath>${project.basedir}/libs/custom-lib-1.0.0.jar</systemPath></dependency>
</dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!-- 关键:包含系统作用域依赖 --><includeSystemScope>true</includeSystemScope></configuration></plugin></plugins>
</build>
http://www.lryc.cn/news/571342.html

相关文章:

  • Vue-8-前端框架Vue之应用基础响应式数据和计算属性
  • 如何设计一个敏感词过滤系统
  • OpenCV 图像仿射变换之旋转
  • flutter的widget的执行顺序,单个组建的执行顺序
  • 什么是数据清洗?数据清洗有哪些步骤?
  • 算法导论第九章:顺序统计的艺术 - 高效查找中位数与第K小元素
  • 【AI分享:LangGraph 开源项目的深度分析报告
  • Spring Boot 数据校验: Bean Validation 注解、分组校验与全局异常处理
  • SSRF3 任意文件读取
  • 游戏引擎学习路径与技术栈指南
  • 基于Qt的配置管理界面实现:保存与加载配置文件
  • SpringCloud + Zookeeper + Feign整合及Feign原理
  • JSON-RPC 2.0 与 1.0 对比总结
  • java面试总结-20250616
  • 字符操作函数续上
  • 图扑 HT 3D 场景视频嵌入应用功能
  • cuda编程笔记(4)--纹理内存
  • OpenCV——图像形态学
  • Docker 快速搭建一个基于 GPT-Vis 组件的统计图表生成服务
  • 【超详细】讯飞智能车PC电脑烧录指南(高级系统部署与恢复)
  • 系统思考:越用力推系统,系统反弹性越大
  • Flask入门指南:从零构建Python微服务
  • Appium环境安装
  • 关于人工智能未来的趋势
  • B站PWN教程笔记-12
  • 计算机视觉| 分割大模型Segment Anything(SAM)从0到1使用
  • Muon:神经网络隐藏层的革命性优化器
  • 从零到一:C语言基础入门学习路线与核心知识点全解析
  • 香橙派3B学习笔记12:C语言操作GPIO_<wiringPi.h>_点灯通用输入输出
  • FPGA 44 ,SDC 时序约束标准( 深度解析 SDC 标准 )