Docker 单个容器运行多个war、jar
方法一:DockerfileRUN echo -e \"#!/bin/sh\n"\"nohup java -jar /app.war --server.port=8085 &\n"\"nohup java -jar /app.war --server.port=8086 &"\>> /usr/bin/start.shRUN chmod +x /usr/bin/start
·
- 方法一:
Dockerfile
#基础镜像
FROM java:8
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
#把你的项目war包引入到容器的root目录下
COPY *.war /app.war
RUN echo \
"#!/bin/sh\n"\
"nohup java -jar /app.war --server.port=8085 &\n"\
"nohup java -jar /app.war --server.port=8086 &"\
>> /start.sh
RUN chmod +x /start.sh
CMD nohup sh -c "/start.sh && java -jar /app.war --server.port=8087"
- 方法二
Dockerfile
#基础镜像
FROM java:8
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
#把你的项目war包引入到容器的root目录下
COPY *.war /app.war
COPY start.sh /start.sh
RUN chmod +x /start.sh
#项目的启动方式
ENTRYPOINT ["./start.sh"]
start.sh
#!/bin/bash
# 命令后加入 & ,保持程序后台持续运行
nohup java -jar /app.war --server.port=8085 &
nohup java -jar /app.war --server.port=8086 &
# 死循环,保持docker前台运行
while [[ true ]]; do
sleep 1
done
或者(推荐下面的写法,上面的while写法可能会有性能损耗,待验证)
#!/bin/bash
# 命令后加入 & ,保持程序后台持续运行
nohup java -jar /app.war --server.port=8085 &
java -jar /app.war --server.port=8086
docker-compose.yml
version: '3.8'
services:
demo-dk:
image: demo-dk:1.0
build:
context: .
dockerfile: Dockerfile
ports:
- "8085:8085"
- "8086:8086"
- "8087:8087"
logging:
driver: 'json-file'
options:
max-size: '30m'
max-file: '5'
shell.sh
docker-compose down && docker rmi -f demo-dk:1.0 && docker-compose up -d --build
测试时将war、Dockerfile、shell.sh、start.sh 放在同一目录下,执行
sh shell.sh
完整源码参考: https://gitee.com/00fly/docker-demo/tree/master/docker/1-n
更多推荐
已为社区贡献11条内容
所有评论(0)