Docker Compose 挂载 JAR 包运行完整教程
复制就能用的 docker-compose.yml 方案,用挂载本地 JAR 包**的方式运行 Java 应用,不用重新构建镜像,修改 JAR 后直接重启容器即可生效。
一、项目目录结构(必须按这个放)
项目文件夹/
├── docker-compose.yml # 编排文件
└── app.jar # 你的 Java 可执行 JAR 包二、完整 docker-compose.yml(推荐版本)
这是最通用、稳定、生产可用的版本:
yaml
services:
java-app:
# 官方 OpenJDK 轻量级镜像(JRE 足够运行 JAR)
image: openjdk:17-jre-slim
# 容器名称
container_name: my-java-app
# 挂载本地 JAR 到容器内(核心!修改本地 jar 容器自动生效)
volumes:
- ./app.jar:/app/app.jar
# 工作目录
working_dir: /app
# 启动命令:运行 JAR
command: ["java", "-jar", "app.jar"]
# 端口映射(宿主机:容器)
ports:
- "8080:8080"
# network_mode: host
# extra_hosts:
# - "host.docker.internal:host-gateway"
# 开机自启
restart: always
# 环境变量(可选,SpringBoot 专用)
# environment:
#- TZ=Asia/Shanghai
#- SPRING_PROFILES_ACTIVE=prod三、启动命令
进入目录执行:
bash
# 后台启动
docker compose up -d --build
# 查看日志
docker compose logs -f
# 停止
docker compose down四、关键说明(必看)
挂载原理
./app.jar:/app/app.jar:把本地当前目录的 JAR 映射到容器内部,本地修改 JAR,容器直接读取最新版- 不用构建 Dockerfile,不用重新打包镜像
JDK 版本选择
- 你的项目是 JDK 8 → 用
openjdk:8-jre-slim - JDK 11 →
openjdk:11-jre-slim - JDK 17 →
openjdk:17-jre-slim
- 你的项目是 JDK 8 → 用
端口修改
- 如果你的项目端口是
9090,把ports改成:yamlports: - "9090:9090"
- 如果你的项目端口是
JVM 内存配置(推荐加上) 防止内存溢出,在
command中添加:yamlcommand: ["java", "-Xms256m", "-Xmx512m", "-jar", "app.jar"]
五、常见问题
启动报错找不到 app.jar
- 检查 JAR 文件名必须是
app.jar - 检查
docker-compose.yml和 JAR 在同一级目录
- 检查 JAR 文件名必须是
端口被占用
- 修改宿主机端口,例如
8081:8080
- 修改宿主机端口,例如
SpringBoot 配置文件挂载 如果你想挂载
application.yml:yamlvolumes: - ./app.jar:/app/app.jar #- ./application.yml:/app/application.yml
总结
- 把
docker-compose.yml和app.jar放在同一目录 - 执行
docker-compose up -d即可运行 - 本地更新 JAR 后,执行
docker-compose restart就能生效 - 不用构建镜像,纯挂载运行,开发/测试非常方便