Docker,Supervisord和supervisor-stdout

时间:2015-04-22 07:29:08

标签: docker supervisord

我正在尝试使用supervisor-stdout集中管理supervisord及其进程的输出。但是使用这种监督配置:

#supervisord.conf

[supervisord]
nodaemon = true

[program:nginx]
command = /usr/sbin/nginx
stdout_events_enabled = true
stderr_events_enabled = true

[eventlistener:stdout]
command = supervisor_stdout
buffer_size = 100
events = PROCESS_LOG
result_handler = supervisor_stdout:event_handler

(请注意,supervisor-stoud的配置部分与the supervisor-stoud site上的示例完全相同)。

...和这个Dockerfile:

#Dockerfile

FROM python:3-onbuild

RUN apt-get update && apt-get install -y nginx supervisor

# Setup supervisord
RUN pip install supervisor-stdout
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY nginx.conf /etc/nginx/nginx.conf

# restart nginx to load the config
RUN service nginx stop

# Start processes
CMD supervisord -c /etc/supervisor/conf.d/supervisord.conf -n

我可以很好地构建图像,但是从中运行容器会给我:

  

错误:supervisor_stdout:无法在[eventlistener:stdout]中解析event_handler

修改

跑步的输出:

  

supervisord -c /etc/supervisor/conf.d/supervisord.conf -n

是:

Error: supervisor_stdout:event_handler cannot be resolved within [eventlistener:stdout]
For help, use /usr/bin/supervisord -h

5 个答案:

答案 0 :(得分:7)

我遇到了同样的问题,简而言之,您需要安装提供supervisor_stdout:event_handler处理程序的Python包。您应该能够发出以下命令:

apt-get install -y python-pip
pip install supervisor-stdout

如果您在该容器上安装了pip,则可以使用简单的:

pip install supervisor-stdout应该足够了,有关该特定包的更多信息可以在这里找到:

https://pypi.python.org/pypi/supervisor-stdout

AFAIK,没有提供supervisor-stdout的debian软件包,所以安装它的最简单方法是通过pip。

希望有人能像我一样来到这里。

[编辑] 正如Vin-G建议的那样,如果你在完成这些步骤后仍然遇到问题,那么supervisord可能会陷入旧版本。尝试更新它。

干杯!

答案 1 :(得分:1)

我遇到了完全相同的问题并使用Ubuntu 14.04作为基本图片而不是Debian Jessie解决了问题(我正在使用基于Jessie的python:2.7图片)。

您可以参考这个完整的工作实施:https://github.com/rehabstudio/docker-gunicorn-nginx

编辑:正如@ Vin-G在评论中指出的那样,可能是因为Debian Jessie附带的主管版本太旧了。您可以尝试从apt中删除它,然后使用pip安装它。

答案 2 :(得分:1)

与上述非常相似,但我不认为有完整的答案。

我不得不从apt

中删除
apt-get remove supervisor

然后用pip重新安装,但是使用pip2,因为当前版本的主管不支持python 3

apt-get install -y python-pip
pip2 install supervisor
pip2 install supervisor-stdout

这一切都奏效了。

虽然现在是监督路径

/usr/local/bin/supervisord

希望有所帮助。

答案 3 :(得分:0)

我使用了这种怪异的方法来使其正常工作。它也可以在Debian Jessie中使用。

我只是将他的file粘贴到了我的项目目录中自己的一个。像/app/supervisord_stdout.py

然后我像这样将其添加到conf中。 /app是容器中我的项目文件的项目目录。

[eventlistener:stdout]
command = python supervisord_stdout.py
buffer_size = 100
events = PROCESS_LOG
directory=/app
result_handler=supervisord_stdout:event_handler
environment=PYTHONPATH=/app

答案 4 :(得分:-1)

我也遇到了这个问题,这是因为Supervisor不支持Python 3。

Below is from the Supervisor v3.3.4 documentation

  

已知Supervisor可在Python 2.4或更高版本上使用,但在任何版本的Python 3下均无法使用。