docker tomcat 日志问题

问题描述 投票:0回答:4

Docker container can only to daemon mode: I run

catalina.sh
to start the tomcat.
但问题是我的日志不会出现在
catalina.out
.

我可以看看 `docker logs ,但这肯定不能在生产环境中运行。
请问如何在生产环境中,在容器不停止的情况下,将Tomcat的日志存入文件中?

docker logfile
4个回答
4
投票

如果你看官方tomcat docker image,它运行

CMD ["catalina.sh", "run"]

这足以在前台启动tomcat,在控制台上显示日志
但是,正如您所说,这可能不会填充 catalina.out。

一个替代方案是

CMD service tomcat start && tail -f /var/lib/tomcat/logs/catalina.out

3
投票

this(题外话)问题中有选项可以让tomcat日志在前台运行。

但要回答您的实际问题,docker logs 命令是从容器获取日志的常用方法。您还可以在主机上找到它们,因为它们存在于文件中。

但最好的办法是使用外部日志服务来收集和聚合日志,这样就不用登录生产服务器了。 Logentries 就是一个例子(尽管它远非完美)。 Splunk 是另一个。 Docker 日志记录驱动程序文档 可能会有所帮助。


0
投票

您可以像这样覆盖 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

-1
投票

您需要在 docker 容器中有一个在前台运行的进程才能让容器运行。

我对我所有的 docker 镜像都使用 hack。 使用以下代码创建脚本 run.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"]
© www.soinside.com 2019 - 2024. All rights reserved.