一个计算机技术爱好者与学习者

0%

好好学Docker:Dockerfile使用Supervisor管理Tomcat

1. 问题描述

容器中,使用supervisor管理tomcat,supervisor报错。
这是因为,使用supervisor监控管理的进程必须以nodaemon启动,而tomcat的startup.sh脚本是daemon方式的。

2. 解决办法一

1、修改startup.sh脚本
在startup.sh的最后的

1
exec "$PRGDIR"/"$EXECUTABLE" start "$@" 

改为

1
exec "$PRGDIR"/"$EXECUTABLE" run "$@"

2、修改supervisor_tomcat.conf
然后supervisor_tomcat.conf内容为:

1
2
3
4
5
6
7
8
9
[program:tomcat]
directory=/opt/apache-tomcat-8.0.44
command=/opt/apache-tomcat-8.0.44/bin/startup.sh
environment=JAVA_HOME="/usr/lib/jvm/jdk1.8.0_131",JAVA_BIN="/usr/lib/jvm/jdk1.8.0_131/bin"
user=root
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log

3. 解决办法二

不需要修改startup.sh,使用catalina.sh。
然后supervisor_tomcat.conf内容为:

1
2
3
4
5
6
7
8
9
[program:tomcat]
directory=/opt/apache-tomcat-8.0.44
command=/opt/apache-tomcat-8.0.44/bin/catalina.sh run
environment=JAVA_HOME="/usr/lib/jvm/jdk1.8.0_131",JAVA_BIN="/usr/lib/jvm/jdk1.8.0_131/bin"
user=root
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log

4. 构建supervisor管理tomcat的镜像

1、准备Dockerfile、supervisord.conf和supervisor_tomcat.conf,内容可以参考hexo-storage/dockerfile-supervisor

2、下载 jdk-8u131-linux-x64.tar.gz 和 apache-tomcat-8.0.44.tar.gz 到download目录

3、构建一个名为centos/supervisor:v1.0的镜像

1
docker build -t centos/supervisor:v1.0 .

4、启动容器

1
2
3
4
5
docker run --name supervisor -d \
-p 18080:8080 \
centos/supervisor:v1.0

docker logs supervisor

5、测试访问

1
curl localhost:18080

5. 后记

本文中的这种管理方式,其实是违背容器使用的基本原则的。容器中,应该只跑一个程序,作为1号进程。
年少无知,本文就不删了,留作纪念吧。

6. 书签