2015-04-22 15 views
6

Próbuję scentralizować dane wyjściowe od supervisora ​​i jego procesów za pomocą supervisor-stdout. Ale przy tej konfiguracji supervisord:Docker, Supervisord i supervisor-stdout

#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 

(Zauważ, że sekcja config od nadzorcy-stoud jest dokładnie taka sama, jak na przykład the supervisor-stoud site).

... i to 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 

mogę zbudować wizerunek dobrze, ale działa pojemnik ze to daje mi:

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

EDIT

moc wyjściowa z pracy:

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

jest:

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

Co to jest wyjście polecenia 'supervisord -c /etc/supervisor/conf.d/supervisord.conf -n'' po uruchomieniu go ręcznie w kontenerze? Użyj: '' docker exec /bin/bash'' –

+0

Dodane wyjście z uruchamiania 'supervisord -c /etc/supervisor/conf.d/supervisord.conf -n' –

+0

Nie widzę, jak/dlaczego uzyskujesz drugi błąd, który zgłosiłeś w swoim pytaniu? –

Odpowiedz

1

miałem dokładnie ten sam problem, rozwiązany za pomocą Ubuntu 14.04 jako obraz bazowej zamiast Debian Jessie (I był przy python:2.7 obraz, który jest oparty na Jessie).

Możesz odwołać się do tej pełnej pracy implementacji: https://github.com/rehabstudio/docker-gunicorn-nginx.

EDYCJA: jak wskazał @ Vin-G w swoim komentarzu, może to być spowodowane tym, że wersja nadzorcy dostarczona z Debian Jessie jest zbyt stara. Możesz spróbować usunąć go z apt i zainstalować zamiast niego pip.

+0

To może zadziałać, ale jest trochę przesady, widzę moją odpowiedź na pytania i hows na naprawianie tego –

7

Miałem ten sam problem, krótko mówiąc, musisz zainstalować pakiet Python, który zapewnia obsługę supervisor_stdout:event_handler. Powinieneś być w stanie wydając następujące polecenia:

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

Jeśli masz pip zainstalowany na tym pojemniku, prosty:

pip install supervisor-stdout powinno wystarczyć, więcej informacji na temat tego konkretnego pakietu można znaleźć tutaj:

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

AFAIK nie ma pakiet debian który zapewnia Inspektora-stdout, więc najprostszym sposobem, aby zainstalować to przez PIP.

Mam nadzieję, że pomaga każdemu, kto tu przyjdzie, tak jak ja.

[Edytuj] Zgodnie z sugestią Vin-G, jeśli nadal masz problem, nawet po wykonaniu tych kroków, superwizor może utknąć w starej wersji. Spróbuj zaktualizować.

Pozdrawiam!

+0

Próbowałem, ale to nie zadziałało. Zauważ również, że oryginalne pytanie mówi, że 'pip install supervisor-stdout' został wykonany i nie rozwiązuje problemu. –

+0

Tak, masz rację. Jestem zdziwiony, miałem ten sam problem co ty, i ten "' instalator instalacji pip-stdout''' zrobił lewę. Jeśli nadal masz dzienniki budowania dockera, aby rzucić nieco światła na ten problem, świetnie! Jeśli nie, po prostu zostawię tutaj odpowiedź, ponieważ zrobiłem to dla mnie i zmiana tego całego obrazu bazowego jest dość uciążliwa, jeśli nie jest to konieczne. –

+1

Znam ten sam problem @ AlexandreBulté, (rozwiązanie nie działa, nawet jeśli pakiet został zainstalowany za pośrednictwem pip). Wierzę, że tutaj jest coś złego, że pakiet systemu nadzoru jest zbyt stary w stosunku do wersji. Aby to naprawić, usuń administratora z apt-get install, a następnie zainstaluj supervisora ​​nadzorującego-stdout. JoãoAntunes, możesz edytować swoją odpowiedź za pomocą tego. Myślę, że to właśnie rozwiąże problem op. –

1

Bardzo podobny do powyższego, ale nie sądzę, że istnieje pełna odpowiedź.

musiałem usunąć z apt

apt-get remove supervisor 

Następnie ponownie zainstalować z pip, ale z PIP2 jak obecna wersja nie obsługuje przełożonego python 3

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

To wszystko wtedy pracował.

Chociaż supervisord ścieżka jest teraz

/usr/local/bin/supervisord 

nadzieję, że pomoże.

Powiązane problemy