使用Dockerfile运行JAR包需基于openjdk:17-jre-alpine镜像,COPY app.jar并设置ENTRYPOINT执行java -jar;构建用docker build -t my-app .,运行用docker run -d -p 8080:8080 --name app-container my-app,支持挂载配置、日志及传环境变量。

直接用 Dockerfile 运行 JAR 包,核心是把 Java 环境、JAR 文件和启动命令打包进镜像,做到一次构建、随处运行。
准备基础文件
在存放 JAR 包的目录里,新建一个没有扩展名的 Dockerfile(注意不是 Dockerfile.txt)。确保 JAR 包也在同一目录下,比如 app.jar。
- Linux/macOS:用
touch Dockerfile创建,再用nano或vim编辑 - Windows:用
echo. > Dockerfile创建,再用记事本打开编辑
编写标准 Dockerfile
推荐使用轻量、安全的官方 OpenJDK 镜像(如 openjdk:17-jre-alpine),内容简洁清晰:
# 使用 Alpine 版 Java 17 运行时
FROM openjdk:17-jre-alpine
<h1>设定工作目录</h1><p>WORKDIR /app</p><h1>复制本地 JAR 到容器内</h1><p>COPY app.jar app.jar</p><h1>暴露应用端口(按实际修改,如 8080、9001)</h1><p>EXPOSE 8080</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/skill9868" title="Java注释规范Skills"><img
src="https://img.php.cn/upload/skill/001/246/273/6adaf20dbae7c507.jpg" alt="Java注释规范Skills" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/skill9868" title="Java注释规范Skills">Java注释规范Skills</a>
<p>当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。</p>
</div>
<a href="/xiazai/skill9868" title="Java注释规范Skills" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div><h1>容器启动时执行</h1><p>ENTRYPOINT ["java", "-jar", "app.jar"]如果需要传 JVM 参数或 Spring Profile,可写成:
ENTRYPOINT ["java", "-Xmx256m", "-Duser.timezone=GMT+08", "-jar", "app.jar", "--spring.profiles.active=prod"]
构建并运行镜像
在 Dockerfile 所在目录执行:
- 构建镜像:
docker build -t my-app .(.表示当前目录,不可省略) - 运行容器:
docker run -d -p 8080:8080 --name app-container my-app
其中 -d 后台运行,-p 做端口映射,--name 指定容器名便于管理。
加载外部配置或日志目录
生产环境通常不把配置打到镜像里。可在运行时挂载:
- 挂载配置文件:
-v ./application.yml:/app/application.yml - 挂载日志目录:
-v ./logs:/app/logs - 传环境变量:
-e "SPRING_PROFILES_ACTIVE=test"
对应 Dockerfile 中可加一句 CMD ["java", "-jar", "app.jar"],方便运行时覆盖 ENTRYPOINT。

















