我在測試把 springboot 的程序部署到 tomcat 容器中發(fā)現(xiàn)springboot 的日志文件 catalina.out 沒有生成,docker logs 也看不到任何相關(guān)日志方库,日志信息不知道去哪里了 ...
分析過程
- 更改logback.xml console 為 file, 重新測試后發(fā)現(xiàn) catalina.out 文件可以生成吕嘀,springboot 相關(guān)日志也是存在的
<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 等步驟),官網(wǎng)的 tomcat 鏡像主進程是 catalina
- 下載了官網(wǎng)的 tomcat 并部署 springboot 程序翎卓,docker logs 可以看到 springboot 日志
總結(jié)
我們自定義的鏡像和官網(wǎng)的鏡像區(qū)別是主進程(官網(wǎng)的是 catalina.sh, 我們的是 run.sh)契邀,運行官網(wǎng)的 tomcat 容器 pid 為 1
的進程是 tomcat, 我們自定義鏡像容器 pid 為 1
的是 run.sh, tomcat 是 run.sh 的子進程。
查詢相關(guān) docker 文檔確認: 只有主進程 (pid 為1)的相關(guān)進程日志會輸出到 stdout (docker logs 可以查詢)失暴, 所以我們這種情況需要更改 logback.xml 的 console 為 file, 或者更改鏡像把 tomcat 的啟動腳本直接作為主進程