Docker 码头工人、监理和监理标准

Docker 码头工人、监理和监理标准,docker,supervisord,Docker,Supervisord,我试图使用supervisor stdout集中SupervisorORD及其进程的输出。但在这种监督配置下: #supervisord.conf [supervisord] nodaemon = true [program:nginx] command = /usr/sbin/nginx stdout_events_enabled = true stderr_events_enabled = true [eventlistener:stdout] command = supervisor

我试图使用
supervisor stdout
集中SupervisorORD及其进程的输出。但在这种监督配置下:

#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的配置部分与上的示例完全相同)

…此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
我可以很好地构建图像,但从中运行容器会让我:

错误:无法在[eventlistener:stdout]中解析supervisor\u stdout:event\u处理程序

编辑

运行时的输出:

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

是:


我遇到了完全相同的问题,并通过使用
ubuntu14.04
作为基础映像而不是
Debian-Jessie
(我使用的是基于Jessie的
python:2.7
映像)解决了这个问题

您可以参考此完整的工作实现:


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

我也遇到了同样的问题,简而言之,您需要安装Python包,该包提供了
supervisor\u stdout:event\u handler
处理程序。您应该能够通过发出以下命令来执行以下操作:

apt-get install -y python-pip
pip install supervisor-stdout
如果您在该容器上安装了
pip
,一个简单的:

pip安装管理器标准输出应足够,有关该特定软件包的更多信息可在此处找到:

顺便说一句,没有debian包提供supervisor标准输出,所以最简单的安装方法是通过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中也起作用

我只是把那个家伙的粘贴到我自己的项目目录中。比如
/app/supervisords\u 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

在容器中手动运行
supervisor-c/etc/supervisor/conf.d/supervisor.conf-n
时,它的输出是什么?使用:
docker exec/bin/bash
添加了运行
supervisord-c/etc/supervisor/conf.d/supervisord.conf-n时的输出
我不明白您如何/为什么会得到问题中报告的其他错误?抱歉,粘贴了错误的输出。嗯。修复了。这可能会起作用,但有点过头了,看看我的答案,了解修复的原因和方法。我试过了,但没有起作用。还请注意,原始问题指出已执行了
pip安装监控程序stdout
,但它并不能解决问题。是的,您是对的。我很困惑,我遇到了和你一样的问题,而且
pip安装管理器stdout
成功了。如果你还有docker build的日志来解释这个问题,那就太好了!如果没有,我就把我的答案留在这里,因为这对我来说是可行的,如果不需要的话,更改整个容器基础映像是相当麻烦的。我在@AlexandreBulté遇到了同样的问题(即使包是通过pip安装的,解决方案也不起作用)。我认为这里的错误在于supervisord系统包的版本太旧。要解决此问题,请从apt get install中删除监控器,然后执行pip install SUPERSOR stdout。JoãoAntunes,你可能想用它编辑你的答案。我想这就是解决op的问题的方法。这是我用ubuntu 14.04的最新图片修复的。对于这个问题,supervisor 3.2.0是否被认为是“旧的”版本?
[eventlistener:stdout]
command = python supervisord_stdout.py
buffer_size = 100
events = PROCESS_LOG
directory=/app
result_handler=supervisord_stdout:event_handler
environment=PYTHONPATH=/app