当前位置: 首页 > 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

相关文章:

  • 在任意路径下简单开启jupyter notebook
  • 瓦瑟斯坦差分隐私中命题7对总变差TV的应用
  • yarn的介绍与操作,yarn和npm的选择
  • WPF特性分析
  • 网络应用程序体系结构
  • 【Vue3 / TypeScript】 项目兼容低版本浏览器的全面指南
  • lspci的资料
  • Win10一体机(MES电脑设置上电自动开机)
  • Google 开发者政策中心 - 3 月版
  • 神经网络的 “成长密码”:正向传播与反向传播深度解析(四)
  • k8s的yaml文件里的volume跟volumeMount的区别
  • 【飞渡科技数字孪生虚拟环境部署与集成教程 - CloudMaster实战指南】
  • 【基于SprintBoot+Mybatis+Mysql】电脑商城项目之显示勾选的购物车数据和创建订单
  • spark和Hadoop之间的对比和联系
  • 【C++】特殊类的设计、单例模式以及Cpp类型转换
  • 明远智睿2351开发板四核1.4G Linux处理器:驱动创新的引擎
  • 实现鼠标拖拽图片效果
  • 搜索引擎的高级语法
  • 【Spring】单例模式的创建方式(Bean解析)
  • 并发设计模式实战系列(3):工作队列
  • 言短意长|大学校门到底应不应该开放?
  • 今天是世界读书日,上海准备了哪些文化大餐?
  • 外汇局:4月以来外汇市场交易保持平稳,跨境资金延续净流入
  • 骑手眼中的“外卖战”
  • 上海银行换帅,顾建忠已任党委书记
  • 纪念沈渭滨︱“要把近代史搞得会通”——读《士与大变动时代》随札