Docker 中运行 JAR 文件

文章目录

步骤 1:准备文件结构

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

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

步骤 2:编写 Dockerfile

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 镜像

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

关键参数说明

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

步骤 4:运行容器

bash 复制代码
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中设置时区:

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

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

yaml 复制代码
version: '3'
services:
  app:
    image: my-java-app:1.0
    ports:
      - "8080:8080"
    depends_on:
      - mysql
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/db

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: db
相关推荐
翱翔-蓝天2 分钟前
WSL + Docker + GPU 安装 video-subtitle-remover 完整文档
运维·docker·容器
江湖有缘6 分钟前
PanCheck 容器化部署:自建网盘链接检测服务全流程
docker
SCBAiotAigc13 分钟前
2026.4.10:docker desktop内网环境安装教程
人工智能·docker·容器·具身智能
饼瑶25 分钟前
Isaac Sim 5.0.0 Docker 部署手册(实验室服务器)
服务器·docker·容器
wb18937 分钟前
docker-ce容器技术重习
运维·笔记·docker·容器·云计算
愈努力俞幸运1 小时前
docker入门,容器,镜像
java·分布式·docker
刘某的Cloud1 小时前
svc中外部流量访问限制
linux·运维·docker·kubernetes·service
janthinasnail1 小时前
使用Docker安装Penpot(UI/UX设计与原型制作工具)
docker·penpot
爱宇阳1 小时前
Supabase Self-Hosting with Docker 学习笔记
笔记·学习·docker
cooldream20091 小时前
基于 Docker 部署 Hermes Agent 并接入飞书机器人的完整指南
docker·飞书·hermes