docker运行两个 jar
时间: 2025-03-13 10:05:48 浏览: 41
### 在 Docker 容器中同时运行两个 JAR 文件的最佳实践
为了在同一 Docker 容器中成功运行多个 JAR 文件,通常的做法是创建一个自定义的 `Dockerfile` 并编写 shell 脚本来依次启动这些应用程序。以下是具体实现方法:
#### 创建 Shell 启动脚本
构建一个多进程管理方案最简单的方法之一就是利用 shell 脚本将所有要执行的任务组合起来。通过这种方式可以在同一个容器里顺序或者并行地启动不同的 Java 应用程序实例。
```bash
#!/bin/sh
java -jar /app/application1.jar &
java -jar /app/application2.jar
wait
```
这段简单的 bash 脚本会先以后台模式(`&`)启动第一个应用再以前台方式启动第二个应用,并等待所有子进程中最后一个结束才退出[^2]。
#### 编写 Dockerfile
接着,在 `Dockerfile` 中指定基础镜像、设置工作目录以及复制必要的文件到目标位置,最后指向前一步准备好的入口点(entrypoint)即上述提到的 shell script:
```dockerfile
FROM openjdk:8-jdk-alpine
WORKDIR /app
COPY application1.jar .
COPY application2.jar .
COPY start.sh ./
RUN chmod +x ./start.sh
ENTRYPOINT ["./start.sh"]
```
此段配置说明了基于官方 OpenJDK 镜像来安装 JDK 环境;设定 `/app` 作为默认的工作路径;把本地编译打包后的 jar 和启动脚本拷贝至该路径下;赋予可执行权限给脚本文件以便于后续调用;最终声明当容器被启动时应该执行哪个命令序列[^1]。
#### 运行容器
准备好以上材料之后就可以按照常规流程去构建自己的定制化镜像并通过如下指令启动它:
```shell
docker build -t multi-app-container .
docker run -d --name my-multi-app \
-p host_port_1:container_port_1 \
-p host_port_2:container_port_2 \
-v local_config_path:/path/in/container/config \
multi-app-container
```
这里假设读者已经熟悉基本概念如端口映射(-p选项),卷挂载(-v参数)等操作[^4]。
尽管如此,值得注意的是单个容器内部署多服务违背了 Docker 的设计理念——每个容器仅负责单一职责的服务单元。因此除非确实存在资源受限或其他特殊原因不得不这样做之外,建议还是遵循最佳实践原则分别独立封装各个组件为单独的微服务形式。
阅读全文
相关推荐


















