前提:
Docker run --name mytom -p 8081:8080 -it tomcat:8.5.49
Docker attach tomcat
提问 1:
似乎只有起停进程(例如按 ctrl+c 或是 docker start mytom)才会有日誌,为何点击 Tomcat 所服务的网站,却没有 logs 透过 Docker attach tomcat 输出呢?
问了 Chatgpt4.0 后,依然给我奇怪的答案:
对于默认的 catalina.sh run ,Tomcat 通常会将日志写入到 logs/catalina.out 文件中,而不是输出到标准输出( STDOUT )。这意味着,即使你使用 docker attach 或 docker logs ,也看不到那些保存在 logs/catalina.out 文件中的日志内容。 如果你希望让 Tomcat 把日志输出到 STDOUT (从而让你通过 docker attach 或 docker logs 查看),你需要修改 Tomcat 的日志配置。
提问 2:
但事实就是起停进程会被 attach 输出,而 Docker attach 会记录标准输出( STDOUT ),哪里有错呢?
1
LemonPrefect 259 天前
catalina 有多种日志,在 stdout 中看到的是 catalina 的启停日志,而不是 Tomcat 的访问日志。对于 Tomcat 访问日志来说,其默认配置如下,输出到文件中。
![]( https://img.erpweb.eu.org/imgs/2024/03/58da92e98313b2a8.png) catalina 启动的日志是由启动脚本决定输出到 STDOUT 中的,与 Tomcat 的访问日志无关。如果你希望将访问日志输出到 STDOUT 中,可以修改 server.xml 来实现。 |
2
Dffcc OP @LemonPrefect
问题是如何从 Tomcat 的 Dockerfile 中,找到 STAOUT 相关文件,你怎么知道要输入图片上的指令呢? cd/comf ls grep server.xml cat server.xml|grep https://github.com/docker-library/tomcat/blob/2922893bc6ccc52af5b663972b5918ce5fb9a841/8.5/jdk21/corretto-al2/Dockerfile @LemonPrefect |
3
LemonPrefect 258 天前 via Android
@Dffcc 这与 Docker 无关但与 Tomcat 有关。server.xml 是 Tomcat 提供的配置文件。
请参阅: https://tomcat.apache.org/tomcat-8.5-doc/config/context.html#Introduction |
4
LemonPrefect 258 天前 via Android
PS. 因此你无法直接在 Dockerfile 中找到此文件,对于 Docker 来说他就是上层服务 src 。
|
5
Dffcc OP @LemonPrefect
https://www.bilibili.com/video/BV1qN411K7W3?t=202.0&p=52 这边讲师有说 Docker logs mytom3 ,没出现内容而离开的原因是因为用 bash 指令,跟这里的 Docker attach tomcat 是不是一样的道理,一切都看 CMD 指令? |
6
LemonPrefect 257 天前 via Android
@Dffcc logs 输出的内容只取决于 STDOUT ,无论什么进程向 STDOUT 输出了,logs 就显示。这里显示了两遍 bash prompt ,是因为容器已经停止了,而在停止的最后时刻,留下了由原有的 entrypoint 输出的 prompt 。根本原因与是不是使用的 bash 一点关系都没有,如果这里的 entrypoint 换成我写的专门启动 catalina 的二进制程序,那你就会看到他输出的 log 。
|
7
Dffcc OP @LemonPrefect 不是 entrypoint ,应该是看 CMD 指令,我的意思是 STDOUT 指令也是看 CMD 吗? 还是只能像 Tomcat 从官网看?
|
8
LemonPrefect 257 天前 via Android
@Dffcc 看 entrypoint ,如果我实现的 entrypoint 是一个从来不向标准输出流输出任何东西的二进制文件,那你将看不见任何输出,无论你使用什么指令。
|
9
Dffcc OP @LemonPrefect 有点难理解,我需要学习更多相关的知识,谢谢你☺️
|