我们正在使用Docker容器并创建了一个Dockerfile。在这个容器里面我们用tomcat图像部署了war文件 我们可以在控制台看到tomcat日志,但控制台日志没有更新 通过URL向tomcat发送请求后。 此外,我们在tomcat日志文件夹
中看不到任何日志文件任何人都可以帮我解决我们如何看到tomcat日志,例如localhost.logs / catalina.logs / manager.logs等
我的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
答案 0 :(得分:2)
以下是dockerfile的一些问题:
你提到你需要java 6,但是在撰写本文时,行FROM java
被设置为使用java:8。
如果在2018年你还需要java 6,那么你需要用FROM java:6-jre
或official page:FROM openjdk:6-jre
的建议替换FROM行,这很危险。我还强烈建议至少使用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,您应该通过执行{{{{{{{ 1}}(资本F)
tail -F
- 在startup.sh退出之前,tail永远不会启动。更好的方法是在启动tomcat服务器之前在startup.sh中执行startup.sh && tail
。那样尾巴将在后台运行。
无论这是一种有点危险的方法,你冒着僵尸进程的风险,因为bash不会管理它的子进程,也不会管理docker。我建议使用supervisord或类似的东西。
(来自https://docs.docker.com/engine/admin/multi-service_container/)
tail -F $CATALINA_HOME/logs/catalina.out &
注意:此dockerfile示例省略了一些最佳做法,例如在与执行apt-get update相同的运行命令中删除apt缓存。
个人最喜欢的是phusion / baseimage,但是设置起来比较困难,因为你需要将包括java在内的所有内容安装到图像中。
如果使用所有这些修改,您仍然没有看到控制台更新的运气,那么您还需要发布您的startup.sh文件或其他与tomcat相关的配置的内容。
P.S。:为了确保tomcat存在要写入的日志文件夹,执行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"]
可能是个好主意。
P.P.S。: java基础图像实际上是使用openjdk而不是oracle。只是想我已经指出了
答案 1 :(得分:0)
您应该检查tomcat日志记录设置。 JRE中的默认logging.properties指定将日志记录路由到System.err的ConsoleHandler。 Apache Tomcat中的默认conf / logging.properties还添加了几个写入文件的FileHandler。
示例logging.properties文件放在$ CATALINA_BASE / conf:
中newKittiesReceived: (Kitty) -> Unit
将servlet-examples Web应用程序放在Web应用程序内的WEB-INF / classes中的logging.properties示例:
handlers = 1catalina.org.apache.juli.FileHandler, \
2localhost.org.apache.juli.FileHandler, \
3manager.org.apache.juli.FileHandler, \
java.util.logging.ConsoleHandler
.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.
3manager.org.apache.juli.FileHandler.level = FINE
3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.FileHandler.prefix = manager.
3manager.org.apache.juli.FileHandler.bufferSize = 16384
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = \
2localhost.org.apache.juli.FileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = \
3manager.org.apache.juli.FileHandler
# For example, set the org.apache.catalina.util.LifecycleBase logger to log
# each component that extends LifecycleBase changing state:
#org.apache.catalina.util.LifecycleBase.level = FINE
的更多信息
答案 2 :(得分:0)
除非我们安装它,否则我们无法在Docker容器中看到日志。
构建Dockerfile: -
docker build -t tomcat
运行Dockerfile映像: -
docker run -p 8080:8080 tomcat
将docker容器中存在的tomcat日志复制到已安装的容器中: -
运行此cmd以安装容器:
1stpath : 2ndpath
docker run \\-d \\-p 8085:8085 \\-v /usr/local/tomcat/logs:/usr/local/tomcat/logs \tomcat
或只是
docker run \\-d \\-v /usr/local/tomcat/logs:/usr/local/tomcat/logs \tomcat
1st: - / usr / local / tomcat / logs:root目录的路径:我们要复制的位置 日志或目的地
2nd: - / usr / local / tomcat / logs:tomcat / logs文件夹的路径 泊坞容器
tomcat:-name of image
如果端口忙,则需要更改端口
现在容器已安装
获取容器运行列表:docker ps -a
现在获取最新创建的容器的容器ID:
docker exec -it < mycontainer > bash
然后我们可以通过
查看日志 cd /usr/local/tomcat/logs
usr/local/tomcat/logs# less Log Name Here
这样可以复制root上的docker容器中的任何文件夹: -
docker cp <containerId>:/file/path/within/container /host/path/target