如何从docker集装箱获得特定的日志文件输出?

以下是我的Dockerfile

FROM tomcat:7-jre8 COPY target/MYAPP.war /usr/local/tomcat/webapps/MYAPP.war RUN ["/usr/local/tomcat/bin/catalina.sh", "start"] 

这是我如何构build图像和启动它的容器:

 docker build -t MYAPP . docker run -it --rm -p 8080:8080 --name MYAPP MYAPP 

我的应用程序在tomcat部署MYAPP.war之后创build日志文件:/var/log/MYAPP.log

我应该如何修改Dockerfile以及我应该使用哪个命令来运行它(“docker run …”),以便在使用oneliner“docker run -it -rm -p 8080:8080 -name”启动容器MYAPP之后MYAPP MYAPP“/var/log/MYAPP.log的内容将被打印到标准输出?

我试图添加到Dockerfile下面的命令,但它没有帮助。

 CMD tail -f /usr/local/MYAPP.log 

你似乎对RUNCMD的区别感到困惑。

RUN指令用于在构build过程中运行命令。 它从不在容器中执行。 当你写…

 RUN ["/usr/local/tomcat/bin/catalina.sh", "start"] 

…这意味着在docker build过程中,Docker将启动tomcat,但会立即杀死它并继续构build您的映像。

只有CMDENTRYPOINT指令定义了在使用ENTRYPOINT run启动映像时将运行的命令。 所以可能你需要像这样的东西:

 CMD /usr/local/tomcat/bin/catalina.sh start && tail -f /usr/local/MYAPP.log 

可能是将日志直接写入标准输出而不是容器中的文件会更好。 重启后会丢失。

查看更多详情https://12factor.net/logs