使用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 artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill9103" title="Docker Image Puller"><img src="https://img.php.cn/upload/skill/000/000/081/179240957376550.jpg" alt="Docker Image Puller" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill9103" title="Docker Image Puller" class="overflowclass">Docker Image Puller</a> <p class="overflowclass">使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。</p> </div> <a rel="nofollow" href="/xiazai/skill9103" title="Docker Image Puller" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div><h1>容器启动时执行</h1><p>ENTRYPOINT ["java", "-jar", "app.jar"]</p>
如果需要传 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。










