将Docker容器日志configuration到特定文件的最简单方法

我想在Docker中运行一些Python服务,他们打印日志到stout和sterr。 日志文件在Docker默认目录中的所有位置,越来越大吃我的空间。

我想更改日志文件位置的原因是因为:

  1. 环境是centos 6.5与docker1.7.1(我不能改变这一点),我有麻烦swtichdocker图像文件夹(这是另一个问题,这个问题是关于日志logging)

  2. Docker 1.8已经发布了一个日志旋转选项。 --log-opt max-size=50m其中1.7不能使用。


我search了很长时间,甚至没有一篇文章谈到configurationdocker容器日志到主机中的特定文件。

我看到的最后的结论是:

  1. 使用–log-driver = syslog,然后使用logstash(必须设置另一个服务logstash,代价高昂)
  2. 使用–log-driver = syslog,logging到papertrail和loggly,这是另一个需要付费的webservice。 谷歌的一些顶级文章都与他们有关,也许他们的SEO我认为,真的很糟糕。
  3. 使用一些docker容器项目,如https://github.com/gliderlabs/logspout ,仍然使用–log-driver = syslog将日志传输到另一个服务…为什么它不会只写入主机中的文件。 ..
  4. 如果应用程序login到文件位置(如/tmp/nginx.log ,则可以使用-v(–volume)将文件映射到主机。 但是我的python服务在命令行中只logging到stout而不是文件,我不能修改它们的代码!

关于以上的认可主要有两种方式:

  1. 使用–log-driver = syslog和另一个服务

    • 良好的隔离
    • 只需将相同的configuration添加到所有容器(-log-opt syslog-address = [tcp | udp | tcp + tls]:// host:port)
    • 但需要一个或多个外部服务
  2. 使用volumne地图

    • 需要更改代码或命令
    • 需要为每个容器设置卷映射(可能不同)

我认为最好的方法是:使用另一个docker容器/服务(无状态,简单或无configuration)来汇聚日志,然后只写一个主机文件(不要发送到另一个服务)

更新:

我使用的一个docker容器是从这个Dockerfile中修改的。

它的命令行是docker run -d binux/pyspider phantomjs