docker容器只能进入守护程序模式:我运行 catalina.sh
启动tomcat。
但是问题是我的日志不会出现在catalina.out
中。
我可以看`docker日志,但这肯定不能在生产环境中运行。
我想问一下,在生产环境中,如何在文档中存储tomcat日志,而没有容器停止?
如果您查看官方的tomcat docker映像,它将运行
CMD ["catalina.sh", "run"]
足以在前景中启动tomcat,在控制台上显示日志。
但是,正如您所说,这可能不会填充Catalina.out。
另一种选择是:
CMD service tomcat start && tail -f /var/lib/tomcat/logs/catalina.out
在此(主题)中有一些选项使tomcat日志在前景中运行。
但是要回答您的实际问题, docker logs 命令是从容器中获取日志的通常方法。您还可以在主机居住在文件中时在主机上找到它们。
,但最好的方法是使用外部日志记录服务来收集和汇总日志,因此您不必登录生产服务器。Logentries是一个例子(尽管它远非完美)。Splunk是另一个。Docker Logging驱动程序文档可能会有所帮助。
您可以这样覆盖CMD:
CMD bash -c "catalina.sh run | tee -a logs/catalina.out"
这样,您可以同时显示和存储日志输出。
但是,如果您甚至要存储所有错误:
CMD bash -c "catalina.sh run |& tee -a logs/catalina.out"
并将其存储成这样的音量:
docker run --rm -it -v /some/place:/usr/local/tomcat/logs yourImage
您需要在Docker容器中的前景中运行一个进程才能运行容器。
我使用所有Docker图像的黑客。使用以下代码创建脚本运行。SH
#!/bin/sh
service tomcat start
tail -f /dev/null
在运行Docker中的Run.sh文件之前,请确保更改权限。
dockerfile的增加将为
COPY run.sh ./run.sh
RUN chmod 755 ./run.sh
CMD ["./run.sh"]