Docker日志问题:未在Tomcat'中创建或显示日志;docker容器中的s日志文件夹

Docker日志问题:未在Tomcat'中创建或显示日志;docker容器中的s日志文件夹,docker,docker-container,war,Docker,Docker Container,War,我们正在使用Docker容器并创建Dockerfile。在这个容器中,我们使用tomcat映像部署了war文件 我们可以在控制台上看到tomcat日志,但控制台日志没有更新 通过URL向tomcat发送请求后。 我们在tomcat日志文件夹中也看不到任何日志文件 有谁能帮助我了解一下如何查看像localhost.logs/catalina.logs/manager.logs这样的tomcat日志吗 我的Dockerfile是:- FROM openjdk:6-jre ENV CATALINA_

我们正在使用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有一些问题: 您提到您需要Java6,但在撰写本文时,java的
行设置为使用java:8

如果2018年您仍然需要java 6,则需要将FROM行替换为java:6-jre
中的
,或者按照openjdk:6-jre中的
的建议进行替换,这是危险的。我还强烈建议至少使用tomcat:7中的
,它应该能够运行Java6小程序,但会包括一些错误修复,包括对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
-直到startup.sh退出,tail才会启动。更好的方法是在启动tomcat服务器之前,在startup.sh内部执行
tail-F$CATALINA\u HOME/logs/CATALINA.out&
。这样,尾巴将在后台运行

无论如何,这是一种有点危险的方法,您可能会面临僵尸进程的风险,因为bash不管理其子进程,docker也不管理。我建议使用supervisord或类似的工具

(来自)

注意:此dockerfile示例省略了一些最佳实践,例如,在执行apt get更新的同一运行命令中删除apt缓存

个人最喜欢的是phusion/baseimage,但安装起来比较困难,因为您需要在映像中安装包括java在内的所有内容


如果经过所有这些修改,您仍然无法看到控制台更新,那么您还需要发布startup.sh文件或其他tomcat相关配置的内容

p.S.:运行mkdir-p$CATALINA_HOME/logs
可能是一个好主意,只是为了确保存在日志文件夹供tomcat写入


p.p.S.:java基本映像实际上使用的是openjdk,而不是oracle映像。我只是想指出一下

您应该检查tomcat日志记录设置。JRE中的默认logging.properties指定一个控制台句柄,该句柄将日志路由到System.err。ApacheTomcat中的默认conf/logging.properties还添加了几个写入文件的文件处理程序

要放置在$CATALINA_BASE/conf中的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
要放置在web应用程序内部的web-INF/类中的servlet examples web应用程序的Example logging.properties:

handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

org.apache.juli.FileHandler.level = FINE
org.apache.juli.FileHandler.directory = ${catalina.base}/logs
org.apache.juli.FileHandler.prefix = servlet-examples.

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

更多信息请访问

除非我们挂载Docker容器,否则无法在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 exec -it < mycontainer > bash 
或者干脆

docker run \\-d \\-v  /usr/local/tomcat/logs:/usr/local/tomcat/logs  \tomcat
第1:-/usr/local/tomcat/logs:根目录的路径:我们要复制的位置 日志或目的地

第二个:-/usr/local/tomcat/logs:中存在tomcat/logs文件夹的路径 码头集装箱

tomcat:-图像的名称

如果端口忙,需要更改端口

现在容器已安装完毕

要获取容器列表,请运行:
docker ps-a

现在获取最新创建的容器的容器id:

                                                1stpath    :      2ndpath
docker run \\-d \\-p 8085:8085 \\-v  /usr/local/tomcat/logs:/usr/local/tomcat/logs  \tomcat
docker exec -it < mycontainer > bash 
要复制根目录上docker容器中的任何文件夹,请执行以下操作:-

docker cp <containerId>:/file/path/within/container /host/path/target
docker cp:/file/path/in/container/host/path/target

为什么不使用tomcat官方映像作为基础,而不是java?尝试检查docker容器中的日志。做了相同的操作,但没有解决问题,我们只需要java 6版本,这就是为什么需要在那里编写java的原因。做了相同的操作,但没有在tomcat的日志文件夹中创建日志