我在码头上运行tomcat,但我看不到日志。它们被写入到tomcat/logs下的各种日志文件中,但是当tomcat在docker容器中运行时,我看不到它们。
这是我的Dockerfile
FROM tomcat:7-jre8
COPY target/MYAPP.war /usr/local/tomcat/webapps/MYAPP.war
RUN ["/usr/local/tomcat/bin/catalina.sh", "start"]这就是我如何构建镜像并从它启动容器:
docker build -t MYAPP .
docker run -it --rm -p 8080:8080 --name MYAPP MYAPP我的应用在tomcat部署MYAPP.war后创建日志文件: /var/ log /MYAPP.log
我应该如何修改Dockerfile,应该使用哪个命令来运行它("docker run ...")因此,在使用"docker run stdout --rm -p 8080:8080 --name MYAPP MYAPP“启动容器MYAPP之后,/var/ -it /MYAPP.log内容将立即打印到stdout?
我试图将下面的命令添加到Dockerfile中,但是没有帮助。
CMD tail -f /usr/local/MYAPP.log发布于 2017-12-08 21:32:40
您似乎对RUN和CMD之间的区别感到困惑。
RUN指令用于在构建过程中运行命令。它永远不会在容器中执行。当你写的时候...
RUN ["/usr/local/tomcat/bin/catalina.sh", "start"]...this意味着在docker build过程中,Docker会启动tomcat,但会立即杀死它并继续构建您的镜像。
只有CMD和ENTRYPOINT指令定义了在使用docker run引导映像时将运行的命令。所以你可能想要这样的东西:
CMD /usr/local/tomcat/bin/catalina.sh start && tail -f /usr/local/MYAPP.log发布于 2018-06-07 06:26:03
好的,您的dockerfile应该包含这样的内容**
from tomcat:7-jre8
copy target/myapp.war /usr/local/tomcat/webapps/myapp.war
entrypoint ["/bin/bash", "/usr/local/tomcat/bin/catalina.sh", "run"]然后,您可以运行基于此镜像的容器,如下所示:
docker run -itd -p 8080:8080 --name aname animage因此,catalina 'run‘命令旨在将所有日志重定向到stdout。这对我们很有用,因为这就是docker的工作方式。如果您现在运行容器,您将能够运行:
docker logs aname输出将是已发送到容器内的stdout的任何内容。您可以随心所欲地执行此操作,但常见的策略是将日志传输到logstash、splunk或上千个其他位置,或者您可以将其写入文件(尽管最后一个文件主要供开发人员使用)。
**当然,您必须更改入口点以匹配您的安装细节。我在这里显示的run命令是针对守护进程的。
原始问题:您最初的问题是基于一个常见的错误;您试图在配置(构建映像)过程中运行tomcat服务器。当您运行容器时,您实际上想要运行服务器。因此,我删除了run并将其替换为入口点,这是运行如下命令的正确方式。最后,cmd用于向入口点传递参数,在本例中我们不需要这些参数。
最后,我选择使用cataline.sh run而不是start,因为run旨在将日志发送到标准输出,而不是像start那样将日志发送到文件。
参考文献
查看日志:https://docs.docker.com/config/containers/logging/
会议日志:https://docs.docker.com/config/containers/logging/configure/
发布于 2020-03-11 01:37:02
要将所有日志定向到stdout,需要执行以下操作:
/dev/stdout传递。这将确保将所有tomcat日志发送到stdout.执行此操作
https://stackoverflow.com/questions/47715280
复制相似问题