我们正在使用 Docker 容器并创建了一个 Dockerfile。在此容器内,我们使用 tomcat 镜像部署了 war 文件 我们可以在控制台看到 tomcat 日志,但控制台日志没有更新 通过 URL 向 tomcat 发送请求后。 此外,我们在 tomcat 日志文件夹中看不到任何日志文件
谁能帮我看看如何查看 localhost.logs/catalina.logs/manager.logs 等 tomcat 日志
我的 Dockerfile 是:-
FROM openjdk:6-jre
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
COPY tomcat $CATALINA_HOME
ADD newui.war $CATALINA_HOME/webapps
CMD $CATALINA_HOME/bin/startup.sh && tail -F $CATALINA_HOME/logs/catalina.out
EXPOSE 8080
使用下面的脚本来构建
$ docker build -t tomcat .
及以下用于运行tomcat
$ docker run -p 8080:8080 tomcat
最佳答案
您的 dockerfile 存在一些问题:
您提到您需要 java 6,但在撰写本文时 FROM java
行设置为使用 java:8。
您需要将 FROM 行替换为 FROM java:6-jre
或按照 official page 的建议: FROM openjdk:6-jre
如果到了 2018 年你仍然需要 java 6,这是危险的。我还强烈建议至少使用 FROM tomcat:7
,它应该能够运行 java 6 小程序,但会包含一些错误修复,包括支持 HTTPS 的较长 Diffie-Hellman 素数(如果您认真的话)关于您的应用程序的安全性)。
Copt tomcat $CATALINA_HOME
您要么错过了 SO 行,要么根本不应该构建您的镜像。它应该是COPY tomcat $CATALINA_HOME
鉴于您正在使用 COPY
命令,因此无需在此之前使用 RUN mkdir -p
,因为 COPY
命令将自动创建所有必需的文件夹。
CMD $CATALINA_HOME/bin/startup.sh && tail -f $CATALINA_HOME/logs/catalina.out
首先是 tail -f
部分:因为您正在寻找可能在服务器操作期间创建和重新创建的日志文件,而不是遵循 FD,所以您应该通过执行 tail -F
(大写F)
startup.sh && tail
- tail 将永远不会启动,直到startup.sh 退出。更好的方法是在启动 tomcat 服务器之前在startup.sh 中执行 tail -F $CATALINA_HOME/logs/catalina.out &
。这样 tail 将在后台运行。
(来自 https://docs.docker.com/engine/admin/multi-service_container/ )
FROM ubuntu:latest
RUN apt-get update && apt-get install -y supervisor
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY my_first_process my_first_process
COPY my_second_process my_second_process
CMD ["/usr/bin/supervisord"]
注意:此 dockerfile 示例省略了一些最佳实践,例如在执行 apt-get 更新的同一运行命令中删除 apt 缓存。
个人最喜欢的是 phusion/baseimage,但设置起来比较困难,因为您需要将包括 java 在内的所有内容安装到镜像中。
如果进行所有这些修改后您仍然没有看到控制台更新,那么您还需要发布您的startup.sh文件或其他tomcat相关配置的内容。
P.S.:最好执行 RUN mkdir -p $CATALINA_HOME/logs
只是为了确保存在可供 tomcat 写入的日志文件夹。
P.P.S.:java基础镜像实际上使用的是openjdk而不是oracle镜像。只是想我会指出来
关于Docker 日志问题 : Logs are not created or displayed in Tomcat's logs folder in docker container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48049656/