【问题标题】:docker tomcat Log issuedocker tomcat 日志问题
【发布时间】:2016-10-30 08:07:55
【问题描述】:

Docker 容器只能到守护模式:我运行catalina.sh 来启动tomcat。
但问题是我的日志不会出现在catalina.out

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

【问题讨论】:

标签: docker logfile


【解决方案1】:

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

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

但最好的方法是使用外部日志服务来收集和汇总日志,这样您就不必登录到生产服务器。 Logentries 就是一个例子(尽管它远非完美)。 Splunk 是另一个。 Docker logging drivers docs 可能会有所帮助。

【讨论】:

    【解决方案2】:

    您需要在 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"]
    

    【讨论】:

    • 你的 hack 是不好的做法!这意味着docker日志变得无用,获取tomcat日志变得非常困难,并且您的进程可以在容器不退出的情况下退出。这些都是坏事!请参阅此处接受的答案以获得更好(更多 dockerey)的方式:):stackoverflow.com/questions/14010448/…
    • 不能说这是一种不好的做法,但可能有更好的方法来做事。由于 docker 需要一个进程在前台运行。我在 ubuntu 上安装了一个 ejabbered 服务器,它作为服务启动,在这种情况下,需要有一个前台进程。
    【解决方案3】:

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

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

    starts tomcat in the foreground, displaying the logs on the console就够了。
    但是,正如您所说,这可能不会填充 catalina.out。

    alternative would be:

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

    【讨论】:

      猜你喜欢
      • 2020-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 2018-05-22
      • 2018-01-14
      • 2017-11-25
      • 2014-06-29
      相关资源
      最近更新 更多