我该如何在我的主机上启动一个应用程序,以便从正在运行的docker容器中读取文件和stdout?
基本上我想这样做:
docker start containerid
./myapp // This app will *somehow* have access files and stdout generated by the container I just stared.
我该怎么做呢?更具体地说,我想把这件事带到哪里去;我想读取docker容器的日志和stdout,并在其他地方处理这些日志。
我也愿意创建另一个docker容器,它可以从另一个容器读取文件和标准输出,但我不知道这是否可能。
6条答案
按热度按时间wydwbb8l1#
由docker容器启动的进程的 stdout 可通过
docker logs $containerid
command获得(使用-f
使其永远运行)。另一种选择是直接通过docker remote API流式传输日志。为了访问日志文件(只有在必须的情况下,才考虑将日志记录到stdout或其他标准解决方案,如syslogd),您唯一的实时选项是配置一个卷(如Marcus Hughes建议的那样),以便日志存储在容器之外,并可用于从主机或其他容器进行处理。
如果您不需要实时访问日志,可以使用
docker export
的you can export the files(tar格式)tvmytwxo2#
要查看stdout,可以使用
-i
启动docker容器。当然,这并不能让您离开已启动的进程并浏览容器。或者,您可以在以下位置查看容器的文件系统
但是,********************************************************************************************************************************************************************************************************************************************************如果要查看日志或任何持久存储,正确的方法是在使用
docker run
时使用-v
开关的attaching a volume。这意味着您可以在主机上检查日志文件,也可以将它们附加到另一个容器并在那里检查它们。brccelvz3#
有点晚了,但这就是我对
journald
所做的。很有力量。您需要在具有
systemd-journald
的操作系统上运行Docker容器。docker run -d --log-driver=journald myapp
这会将所有内容导入到主机的日志中,它会处理日志修剪,存储格式等内容,并为您提供一些很酷的查看选项:
journalctl CONTAINER_NAME=myapp -f
它会在记录时将其提供给您的控制台,
journalctl CONTAINER_NAME=myapp > output.log
这就给了你一个文件夹里的所有东西,或者
journalctl CONTAINER_NAME=myapp --since=17:45
另外,如果您愿意,您仍然可以通过
docker logs ....
查看日志。没有更多的
> my.log
或-v "/apps/myapp/logs:/logs"
等3b6akqbq4#
您可以在以下位置查看容器的文件系统
你就可以
5lwkijsr5#
在Docker容器和主机系统之间,或者在不同的容器之间共享文件,最好使用volumes。
让你的应用程序运行在另一个容器中可能是你最好的解决方案,因为它将确保你的整个应用程序可以很好地隔离和轻松部署。您正在尝试做的事情听起来非常接近this excellent blog post中描述的设置,请看一下!
1mrurvl16#
我在Linux上运行它。
我最终做的是删除docker run中的-t选项,然后通过tr -d管道输出以删除\r字符。
所以我有:
它的输出可以被捕获并存储在一个bash变量中。这其实是有道理的。