1. 背景
Docker
启动Tomcat
默认是CMD ["catalina.sh", "run"]
,日志将会托管给Docker
容器,没有生成日志文件,只能使用命令 docker logs -f <CONTAINER_ID>
查看。
只有使用startup.sh
启动才会输出catalina.out
。但是Docker
如果以startup.sh
启动,这时Docker
需要一个后台执行程序才会保持容器不退出。
2. 解决方案
以我们的T_SMS
项目为例说明具体步骤。
2.1 新建run.sh
文件
文件中使用startup.sh
启动并一直tail -f catalina.out
就不会退出容器,run.sh文件内容如下:
#! /bin/bash
bash /usr/local/tomcat/bin/startup.sh
tail -f /usr/local/tomcat/logs/catalina.out
2.2 修改Dockerfile
文件
FROM lucksoft/tomcat:9-jdk8
ENV TZ Asia/Shanghai
WORKDIR /usr/local/tomcat
RUN rm -rf /usr/local/tomcat/webapps/*
ARG WAR_FILE
COPY server.xml /usr/local/tomcat/conf/
# 复制文件到容器内部的指定目录
COPY run.sh /usr/local/tomcat/bin/
# 赋予权限
RUN chmod 777 /usr/local/tomcat/bin/run.sh
COPY target/${WAR_FILE} /usr/local/tomcat/webapps/
RUN mv /usr/local/tomcat/webapps/${WAR_FILE} /usr/local/tomcat/webapps/ROOT.war
# run.sh启动
CMD ["/usr/local/tomcat/bin/run.sh"]
# CMD ["catalina.sh", "run"]
可以通过docker run
运行一个容器, 或者在Rancher
中部署,使用docker exec
命令进入容器就可以发现/usr/local/tomcat/logs
目录下就会出现catalina.out
日志文件。但是每次重启服务catalina.out
日志都会清空,日志就会丢失,不利于日志的备份。我们可以通过下面的方案解决。
2.3 Tomcat日志文件按日期备份
下面的操作都是在宿主机进行
- 进入宿主机的sbin目录,创建一个cut_log目录,然后再新建目录中创建cut_log.sh文件,具体命令如下:
cd sbin
mkdir cut_log
cd cut_log
vi cut_log.sh
cut_log.sh文件的输入内容如下,保存退出:
#!/bin/bash
cd `dirname $0`
DATE=`date +%Y-%m-%d`
DATE30=`date -d '30 days ago' +%Y-%m-%d`
# 宿主机数据卷
cd /data/app/cc-omp/oss/sms_login
ls others >/dev/null 2>&1
if [ $? != 0 ];then
mkdir others
fi
find . -type f -mtime +30 -exec mv {} others/ \;
cp catalina.out catalina.out.${DATE}
#清空
echo > catalina.out
执行下面的命令给文件授权:
chmod +x cut_log.sh
执行下面的命令配置定时器:
crontab -e
添加以下内容,并保存退出:
59 23 * * * /sbin/cut_log/cut_log.sh
可通过以下命令查看是否已生效:
crontab -l