Ole*_*leg 1 logging tomcat 12factor docker
我正在docker中运行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"]
Run Code Online (Sandbox Code Playgroud)
这是我构建图像并从中启动容器的方式:
docker build -t MYAPP .
docker run -it --rm -p 8080:8080 --name MYAPP MYAPP
Run Code Online (Sandbox Code Playgroud)
在tomcat部署MYAPP.war之后,我的应用程序创建了日志文件:/var/log/MYAPP.log
我应该如何修改Dockerfile以及应该使用哪个命令来运行它(“ docker run ...”),以便在使用oneliner启动容器MYAPP之后立即使用“ docker run -it --rm -p -p 8080:8080 --name MYAPP MYAPP”中的/var/log/MYAPP.log的内容是否会打印到stdout?
我试图将以下命令添加到Dockerfile中,但没有帮助。
CMD tail -f /usr/local/MYAPP.log
Run Code Online (Sandbox Code Playgroud)
需要执行以下操作将所有日志定向到标准输出:
/dev/stdout。这将确保所有 tomcat 日志都发送到 stdout。您似乎对RUN和之间的区别感到困惑CMD。
该RUN指令用于在构建过程中运行命令。它永远不会在容器中执行。当你写...
RUN ["/usr/local/tomcat/bin/catalina.sh", "start"]
Run Code Online (Sandbox Code Playgroud)
...这意味着在此docker build过程中,Docker将启动tomcat,但会立即将其杀死并继续构建您的映像。
只有CMD和ENTRYPOINT指令定义了使用引导映像时将运行的命令docker run。因此,您可能想要以下内容:
CMD /usr/local/tomcat/bin/catalina.sh start && tail -f /usr/local/MYAPP.log
Run Code Online (Sandbox Code Playgroud)