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

Docker 中运行 JAR 文件

文章目录

      • 步骤 1:准备文件结构
      • 步骤 2:编写 Dockerfile
      • 步骤 3:构建 Docker 镜像
      • 步骤 4:运行容器
      • 常见问题解决
        • Q1:容器启动后立即退出
        • Q2:时区不一致
        • Q3:依赖外部服务(如MySQL)

步骤 1:准备文件结构

在项目根目录创建以下结构(假设 JAR 包名为 app.jar):

my-java-app/
├── Dockerfile      # Docker构建脚本
├── app.jar         # 编译好的Java可执行包
└── config/         # 配置文件目录(可选)└── application.properties

步骤 2:编写 Dockerfile

# 使用官方Java基础镜像(根据JDK版本选择)
FROM openjdk:8-jdk-alpine# 设置工作目录
WORKDIR /app# 复制JAR文件和配置文件到容器
COPY app.jar /app/app.jar
COPY config/application.properties /app/config/# 声明暴露端口(与Spring Boot应用的server.port一致)
EXPOSE 8080# 使用环境变量传递JVM参数
ENTRYPOINT exec java $JAVA_OPTS -jar app.jar

步骤 3:构建 Docker 镜像

# 在Dockerfile所在目录执行(-t指定镜像名称和标签)
docker build -t my-java-app:1.0 .

关键参数说明

  • -t my-java-app:1.0:定义镜像名称和标签
  • .:指定构建上下文为当前目录

步骤 4:运行容器

docker run -d \                # 后台运行-p 8081:8080 \               # 端口映射(宿主机端口:容器端口)-e JAVA_OPTS="-Xms2g -Xmx2g -Xmn1g -XX:MaxMetaspaceSize=256m -Xss256k" \    # 传递JVM参数(如内存限制)--name my-app my-java-app:1.0             # 使用的镜像

常见问题解决

Q1:容器启动后立即退出
  • 检查日志docker logs my-app
  • 常见原因
    • JAR包路径错误 → 确认Dockerfile中的COPY路径
    • 端口冲突 → 修改-p参数或应用配置文件中的端口
Q2:时区不一致

在Dockerfile中设置时区:

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
Q3:依赖外部服务(如MySQL)

使用 docker-compose.yml 编排多容器:

version: '3'
services:app:image: my-java-app:1.0ports:- "8080:8080"depends_on:- mysqlenvironment:SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/dbmysql:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: rootMYSQL_DATABASE: db
http://www.xdnf.cn/news/83863.html

相关文章:

  • std::vector 自定义分配器
  • 第六章 QT基础:2、编程基础及串口助手案例
  • 一文读懂什么是 MCP、A2A、ANP
  • TypeScript十大关键语法
  • 第44讲:玩转土壤数据!用机器学习挖掘地球皮肤的秘密 [特殊字符][特殊字符]
  • 集成算法学习案例
  • Open GL ES -> 模版测试,绘制SurfaceView中某个目标区域
  • 【目标检测】对YOLO系列发展的简单理解
  • SharpMap与TerraLib:C#与C++开源GIS库
  • Docker Compose常用命令
  • S32K144学习(16)-Bootloader
  • NLP高频面试题(五十)——大模型(LLMs)分词(Tokenizer)详解
  • uniapp-商城-33-shop 布局搜索页面以及u-search
  • QTextDocument 入门
  • 多路转接poll服务器
  • MySQL 启动报错:InnoDB 表空间丢失问题及解决方法
  • 基于STM32的室内环境监测系统
  • .NET下 using 块的作用
  • 正则表达式
  • 【AAudio】A2dp sink创建音频轨道的源码流程分析
  • 【OSG源码阅读】Day 1: 从Viewer的run函数开始
  • Sentinel数据S2_SR_HARMONIZED连续云掩膜+中位数合成
  • Spark-SQL(总结)
  • Saliency Driven Perceptual Image Compression阅读
  • 如何解决消费者高频触发订单更新?
  • ProxySQL 的性能优化需结合实时监控数据与动态配置调整
  • pip install torchsummary报错
  • 5个Go接口常见错误及避免方法
  • 机器学习基础 - 分类模型之逻辑回归
  • 是否可以使用非被动 S4P 文件进行反嵌?