0%

Dockerfile使用Supervisor管理Tomcat

问题描述

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

解决办法一

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

解决办法二

不需要修改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

构建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

后记

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

书签

  • 本文作者: 好好学习的郝
  • 本文链接: https://www.voidking.com/dev-dockerfile-supervisor/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!源站会及时更新知识点及修正错误,阅读体验也更好。欢迎分享,欢迎收藏~