我们现在系统部署在客户的一个云平台上,只要编写 dockerfile ,用平台制作镜像即可。背后可能是有 k8s 啥的。现在有个问题,我容器里跑 tomcat ,本来是输出 catalina.out 的,所以 dockerfile 最后一行加上 tomcat 启动后 && tail -f catalina.out,这没啥问题,平台的 web 界面也就能看见日志了。
最近要把 catalina.out 去掉,我这个需求是要彻底不输出这个文件,所以只能去掉 tail -f catalina.out ,但是这样容器就会 crashloopbak ,以前的经验是必须带这么一个 tail -f 来吊住进程,哪怕 tail -f /dev/null 也行。我这次就想 dockerfile 执行 tomcat 启动,但是把控制台的日志给我带着输出到 web 界面。这个 dockerfile 到底怎么写呢。CMD ? entrypoint ?能把手动启动 bin/startup.sh 的日志在 docker 里输出来
![]() |
1
NotFoundEgg 22 天前 ![]() |
2
julyclyde 22 天前
首先你的经验就不对
用 tail-f 来吊住是错误的做法 你应该是让 java 占据前台直接 stdout/stderr 输出日志 |
![]() |
3
nutting OP @julyclyde 哎,是啊,一直以为这样才行。原来是要一楼的写法,这细节,我一直是 cmd 后面没有括号引号什么的 ,而且用的 startup.sh
|
![]() |
5
NotFoundEgg 22 天前
@nutting tomcat 官方镜像最后就是 CMD ,详见: https://github.com/docker-library/tomcat/blob/master/Dockerfile.template
如果你的 dockerfile 是 FROM 的 tomcat ,那其实不用自己再写一遍 CMD ["catalina.sh", "run"] |