我在测试把 springboot 的程序部署到 tomcat 容器中发现springboot 的日志文件 catalina.out 没有生成,docker logs 也看不到任何相关日志,日志信息不知道去哪里了 ...
分析过程
- 更改logback.xml console 为 file, 重新测试后发现 catalina.out 文件可以生成,springboot 相关日志也是存在的
<root level="DEBUG"> <appender-ref ref="FILE" /> <!-- <appender-ref ref="console" /> --> </root>
- 确认 jdk 版本 (1.8)
- 查看 image dockerfile, 我们自定义的 image 里主进程是 run.sh (里面包含了 download war, unpack, start tomcat 等步骤),官网的 tomcat 镜像主进程是 catalina
- 下载了官网的 tomcat 并部署 springboot 程序,docker logs 可以看到 springboot 日志
总结
我们自定义的镜像和官网的镜像区别是主进程(官网的是 catalina.sh, 我们的是 run.sh),运行官网的 tomcat 容器 pid 为 1
的进程是 tomcat, 我们自定义镜像容器 pid 为 1
的是 run.sh, tomcat 是 run.sh 的子进程。
查询相关 docker 文档确认: 只有主进程 (pid 为1)的相关进程日志会输出到 stdout (docker logs 可以查询), 所以我们这种情况需要更改 logback.xml 的 console 为 file, 或者更改镜像把 tomcat 的启动脚本直接作为主进程