首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Tomcat、Docker、Logging和STDOUT?

Tomcat、Docker、Logging和STDOUT?
EN

Stack Overflow用户
提问于 2017-12-08 21:22:52
回答 3查看 16.1K关注 0票数 4

我在码头上运行tomcat,但我看不到日志。它们被写入到tomcat/logs下的各种日志文件中,但是当tomcat在docker容器中运行时,我看不到它们。

这是我的Dockerfile

代码语言:javascript
复制
FROM tomcat:7-jre8
COPY target/MYAPP.war /usr/local/tomcat/webapps/MYAPP.war
RUN ["/usr/local/tomcat/bin/catalina.sh", "start"]

这就是我如何构建镜像并从它启动容器:

代码语言:javascript
复制
docker build -t MYAPP .
docker run -it --rm -p 8080:8080 --name MYAPP MYAPP

我的应用在tomcat部署MYAPP.war后创建日志文件: /var/ log /MYAPP.log

我应该如何修改Dockerfile,应该使用哪个命令来运行它("docker run ...")因此,在使用"docker run stdout --rm -p 8080:8080 --name MYAPP MYAPP“启动容器MYAPP之后,/var/ -it /MYAPP.log内容将立即打印到stdout?

我试图将下面的命令添加到Dockerfile中,但是没有帮助。

代码语言:javascript
复制
CMD tail -f /usr/local/MYAPP.log
EN

回答 3

Stack Overflow用户

发布于 2018-06-07 06:26:03

好的,您的dockerfile应该包含这样的内容**

代码语言:javascript
复制
from tomcat:7-jre8
copy target/myapp.war /usr/local/tomcat/webapps/myapp.war
entrypoint ["/bin/bash", "/usr/local/tomcat/bin/catalina.sh", "run"]

然后,您可以运行基于此镜像的容器,如下所示:

代码语言:javascript
复制
docker run -itd -p 8080:8080 --name aname animage

因此,catalina 'run‘命令旨在将所有日志重定向到stdout。这对我们很有用,因为这就是docker的工作方式。如果您现在运行容器,您将能够运行:

代码语言:javascript
复制
docker logs aname

输出将是已发送到容器内的stdout的任何内容。您可以随心所欲地执行此操作,但常见的策略是将日志传输到logstash、splunk或上千个其他位置,或者您可以将其写入文件(尽管最后一个文件主要供开发人员使用)。

**当然,您必须更改入口点以匹配您的安装细节。我在这里显示的run命令是针对守护进程的。

原始问题:您最初的问题是基于一个常见的错误;您试图在配置(构建映像)过程中运行tomcat服务器。当您运行容器时,您实际上想要运行服务器。因此,我删除了run并将其替换为入口点,这是运行如下命令的正确方式。最后,cmd用于向入口点传递参数,在本例中我们不需要这些参数。

最后,我选择使用cataline.sh run而不是start,因为run旨在将日志发送到标准输出,而不是像start那样将日志发送到文件。

参考文献

查看日志:https://docs.docker.com/config/containers/logging/

会议日志:https://docs.docker.com/config/containers/logging/configure/

票数 3
EN

Stack Overflow用户

发布于 2020-07-07 22:36:00

在这里找到了一个很好的方法:https://github.com/Scout24/tomcat-stdout-accesslog/issues/2

更换server.xml文件中的以下阀门。

代码语言:javascript
复制
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/proc/self/fd"
       prefix="1" suffix="" rotatable="false"
       pattern="%h %l %u %t &quot;%r&quot; %s %b" />

仅适用于Linux!

这种“很好的方式”对我来说不出所料。

票数 1
EN

Stack Overflow用户

发布于 2017-12-08 22:08:18

将日志直接写入标准输出可能会比将日志直接写入容器中的文件更好。它将在重启后丢失。

有关详细信息,请参阅https://12factor.net/logs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47715280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档