Docker, Supervisord 和 supervisor-stdout

Docker, Supervisord and supervisor-stdout

我正在尝试使用 supervisor-stdout 集中来自 supervisord 及其进程的输出。但是有了这个 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

我可以很好地构建图像,但是 运行 它的容器给了我:

Error: supervisor_stdout:event_handler cannot be resolved within [eventlistener:stdout]

编辑

运行的输出:

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

我遇到了完全相同的问题并通过使用 Ubuntu 14.04 作为基础图像而不是 Debian Jessie 解决了它(我使用的是基于 Jessie 的 python:2.7 图像)。

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

编辑:正如@Vin-G 在他的评论中所指出的,这可能是因为 Debian Jessie 附带的主管版本太旧了。您可以尝试将其从 apt 中删除并改用 pip 安装。

我遇到了同样的问题,简而言之,您需要安装提供 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

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

希望它能帮助像我一样来到这里的人。

[编辑] 正如 Vin-G 所建议的,如果在完成这些步骤后仍然有问题,supervisord 可能停留在旧版本中。尝试更新它。

干杯!

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

我不得不从 apt

中删除
apt-get remove supervisor

然后用pip重新安装,但是用pip2因为目前的supervisor版本不支持python 3

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

这一切都奏效了。

虽然supervisord路径现在是

/usr/local/bin/supervisord

希望对您有所帮助。

我用这种笨拙的方式让它工作。它也适用于 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