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 | [program:tomcat] |
3. 解决办法二
不需要修改startup.sh,使用catalina.sh。
然后supervisor_tomcat.conf内容为:
1 | [program:tomcat] |
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 | docker run --name supervisor -d \ |
5、测试访问
1 | curl localhost:18080 |
5. 后记
本文中的这种管理方式,其实是违背容器使用的基本原则的。容器中,应该只跑一个程序,作为1号进程。
年少无知,本文就不删了,留作纪念吧。