如何从正在运行的Docker容器中读取文件和stdout

我将如何去启动一个应用程序在我的主机,以便从正在运行的docker集装箱读取文件和标准输出?

基本上我想这样做:

docker start containerid ./myapp // This app will *somehow* have access files and stdout generated by the container I just stared. 

我将如何去做呢? 更具体地说,我正在试图去与这个; 我想读取docker容器的日志和标准输出,并在其他地方处理这些日志。

我也愿意创build另一个docker容器,可以从另一个容器读取文件和标准输出,但是我不知道这是否可能。

Docker容器启动的进程的stdout可以通过docker logs命令 (使用-f来保持它永远不变)。 另一个select是通过docker远程API直接stream式传输日志。

对于访问日志文件(只有必要时,考虑logging到标准输出或其他标准的解决scheme,如syslogd),你唯一的实时选项是configuration一个卷 (如马库斯休斯build议),以便日志存储在容器外,可供处理从主机或另一个容器。

如果您不需要实时访问日志,则可以使用docker export 将文件 (tar格式) docker export

要查看标准输出,可以使用-i启动泊坞窗容器。 这当然不能让你离开开始的过程和探索容器。

 docker start -i containerid 

或者,您可以查看容器的文件系统

 /var/lib/docker/containers/containerid/root/ 

但是,这些都不是理想的。 如果您想要查看日志或任何永久性存储,则在使用docker run时,正确的方法是使用-v开关附加一个卷 。 这意味着您可以检查主机上的日志文件,或将它们附加到另一个容器并在那里检查它们。

您可以查看容器的文件系统

 /var/lib/docker/devicemapper/mnt/$CONTAINER_ID/rootfs/ 

你可以

 tail -f mylogfile.log 

在Docker容器和主机系统之间,或在不同的容器之间共享文件最好使用卷来完成。

让您的应用程序在另一个容器中运行可能是您的最佳解决scheme,因为它将确保您的整个应用程序可以很好地隔离并轻松部署。 你想要做的事听起来非常接近这个优秀的博客文章中描述的设置,请看看!