将Docker作为syslog-ng目标运行失败

我有一个Vagrant创build的虚拟机运行股票Ubuntu Trusty 64,与一个主机CPU分配给它。 在那个虚拟机中,我有一个运行Python 3.4.3版本的Docker镜像:

FROM python:3.4.3-slim ENTRYPOINT ["/usr/local/bin/python"] 

当我执行一个任意的Python脚本时:

 import time while True: time.sleep(1) 

喜欢这个:

 sudo docker run -i -v /etc/alloy_listener/scripts:/scripts:ro alloy_listener /scripts/test.py 

一切都很好,容器运行,只是坐在那里做很less。 如果我将打印语句添加到Python脚本,它将按照预期发送到stdout。

我还在该虚拟机中安装了syslog-ng,我的意图是使用我的集装箱式Python作为syslog-ng目标:

 source s_foo { unix-stream("/dev/log"); }; destination d_foo { program("'docker run -i -v /etc/alloy_listener/scripts:/scripts:ro alloy_listener /scripts/test.py'"); }; log { source(s_foo); destination(d_foo); }; 

但是当我重新加载configuration时,syslog-ng消耗了大约20%的CPU和100%的CPU,并且容器永远不会被创build(运行sudo docker ps -a不会产生容器)。 运行sudo syslog-ng-ctl stats告诉我它正试图执行程序:

 dst.program;d_foo#0;'docker run -i -v /etc/alloy_listener/scripts:/scripts:ro alloy_listener /scripts/test.py';a;dropped;0 dst.program;d_foo#0;'docker run -i -v /etc/alloy_listener/scripts:/scripts:ro alloy_listener /scripts/test.py';a;processed;2 dst.program;d_foo#0;'docker run -i -v /etc/alloy_listener/scripts:/scripts:ro alloy_listener /scripts/test.py';a;stored;0 

我的感觉是,因为syslog-ng使用了20%的CPU,但是100%的主机,这是I / O绑定和虚拟机工作非常难以跟上。 为此,我尝试在Python脚本中使用stdin和stdout消费,但据我所知,因为它甚至没有创build容器,所以没有达到脚本的程度。

所以我的下一个想法是,必须有docker的-a-d-i-t标志的组合,我还没有尝试过,但是我确定我已经尝试了所有允许的组合。

我错过了什么?

如果在前台启动syslog-ng(syslog-ng-binary -Fedv),则会看到syslog-ng启动并停止循环中的程序目标,导致100%的CPU停止运行。 但是,在本地调查问题后,应该使用程序目标(不带'):program(“sudo docker run -i -v / scripts:/ scripts python-test /scripts/test.py”);

Br,Micek