将Docker容器日志configuration到特定文件的最简单方法
我想在Docker中运行一些Python服务,他们打印日志到stout和sterr。 日志文件在Docker默认目录中的所有位置,越来越大吃我的空间。
我想更改日志文件位置的原因是因为:
-
环境是centos 6.5与docker1.7.1(我不能改变这一点),我有麻烦swtichdocker图像文件夹(这是另一个问题,这个问题是关于日志logging)
-
Docker 1.8已经发布了一个日志旋转选项。
--log-opt max-size=50m
其中1.7不能使用。
我search了很长时间,甚至没有一篇文章谈到configurationdocker容器日志到主机中的特定文件。
我看到的最后的结论是:
- 使用–log-driver = syslog,然后使用logstash(必须设置另一个服务logstash,代价高昂)
- 使用–log-driver = syslog,logging到papertrail和loggly,这是另一个需要付费的webservice。 谷歌的一些顶级文章都与他们有关,也许他们的SEO我认为,真的很糟糕。
- 使用一些docker容器项目,如https://github.com/gliderlabs/logspout ,仍然使用–log-driver = syslog将日志传输到另一个服务…为什么它不会只写入主机中的文件。 ..
- 如果应用程序login到文件位置(如
/tmp/nginx.log
,则可以使用-v(–volume)将文件映射到主机。 但是我的python服务在命令行中只logging到stout而不是文件,我不能修改它们的代码!
关于以上的认可主要有两种方式:
-
使用–log-driver = syslog和另一个服务
- 良好的隔离
- 只需将相同的configuration添加到所有容器(-log-opt syslog-address = [tcp | udp | tcp + tls]:// host:port)
- 但需要一个或多个外部服务
-
使用volumne地图
- 需要更改代码或命令
- 需要为每个容器设置卷映射(可能不同)
我认为最好的方法是:使用另一个docker容器/服务(无状态,简单或无configuration)来汇聚日志,然后只写一个主机文件(不要发送到另一个服务)
更新:
我使用的一个docker容器是从这个Dockerfile中修改的。
它的命令行是docker run -d binux/pyspider phantomjs
。