Ich bin relativ neu mit uWSGI Python-Anwendungen zu dienen und ich versuche, einen uWSGI-Prozess im Kaiser-Modus mit einem Vasallen zu starten, aber jedes Mal versuche ich uWSGI innerhalb von Docker mit dem folgenden Befehl zu starten (wie root
):Warum startet uWSGI nicht in Docker?
# /usr/local/bin/uwsgi --ini /etc/uwsgi/emperor.ini
Was ich als Antwort erhalten, ist:
[uWSGI] getting INI configuration from /etc/uwsgi/emperor.ini
2.0.13.1
Die emperor.ini
Konfigurationsdatei wie folgt aussieht:
# files/etc/uwsgi/emperor.ini
[uwsgi]
emperor = /etc/uwsgi/apps-enabled
die-on-term = true
log-date = true
Während der einzige Konfiguration Vasall wie folgt aussieht:
# files/etc/uwsgi/apps-enabled/application.ini
[uwsgi]
app_dir = /var/www/server
plugin = python
master = true
callable = app
chdir = %(app_dir)
mount = /=%(app_dir)/start.py
protocol = uwsgi
socket = :8079
uid = www-data
gid = www-data
buffer-size = 32768
enable-threads = true
single-interpreter = true
processes = 1
stats = 127.0.0.1:1717
(NB: Die oben genannten Dateinamen in Bezug auf gegeben werden, wo sie auf die Dockerfile leben relativ, die dann im Grunde wird sie an die richtigen Stellen zu kopieren, das Entfernen von Präfix files
)
Derzeit ist das uwsgi Docker Bild, das ich gebaut bin mit aus einem ubuntu:trusty
Basisbild (obwohl ich ubuntu:latest
und alpine:latest
und traf das gleiche Problem) ausprobiert habe, und obwohl ich versuche, den uwsgi Prozess zu starten mit Vorgesetzten, wie vorher erwähnt y, schlägt es auch fehl, wenn es direkt von der Befehlszeile ausgeführt wird. Im Docker Image installiere ich uWSGI mit pip
, habe aber auch versucht, apt-get
mit dem gleichen Ergebnis zu verwenden.
Ich sollte auch erwähnen, dass ich verschiedene Versionen von uWSGI 2.0.13.1 und 1.9.omething mit dem gleichen Ergebnis ausprobiert habe, wenn das hilft.
# Dockerfile
FROM ubuntu:trusty
MAINTAINER Sean Quinn "[email protected]"
RUN apt-get update \
&& apt-get install -y \
ack-grep git nano \
supervisor \
build-essential gcc python python-dev python-pip
RUN sed -i 's/^\(\[supervisord\]\)$/\1\nnodaemon=true/' /etc/supervisor/supervisord.conf \
&& sed -i 's/^\(\[supervisord\]\)$/\1\nloglevel=debug/' /etc/supervisor/supervisord.conf \
&& sed -i 's/^\(files = .*\)$/;\1/' /etc/supervisor/supervisord.conf \
&& sed -i 's/^\(\[include\]\)$/\1\nfiles = \/etc\/supervisor\/conf.d\/*.conf/' /etc/supervisor/supervisord.conf
ENV UWSGI_VERSION 2.0.13.1
RUN pip install uwsgi==${UWSGI_VERSION}
RUN mkdir -p /etc/uwsgi \
&& mkdir -p /etc/uwsgi/apps-available \
&& mkdir -p /etc/uwsgi/apps-enabled \
&& mkdir -p /var/log/uwsgi
COPY files/etc/supervisor/conf.d/uwsgi.conf /etc/supervisor/conf.d/uwsgi.conf
COPY files/etc/uwsgi/emperor.ini /etc/uwsgi/emperor.ini
VOLUME /etc/uwsgi/apps-enabled
VOLUME /var/www
ENTRYPOINT ["/usr/bin/supervisord"]
CMD ["-c", "/etc/supervisor/supervisord.conf"]
Wie erwähnt werden die supervisord
Prozess versucht, den uwsgi Prozess unter Verwendung der folgenden Supervisor Konfiguration zu starten.
# files/etc/supervisor/conf.d/uwsgi.conf
[program:uwsgi]
command=/usr/local/bin/uwsgi --ini /etc/uwsgi/emperor.ini
user=root
Die Anwendung Python-Dateien werden in einem Unterverzeichnis von /var/www
montiert und die Anwendung uwsgi Konfiguration wird in /etc/uwsgi/apps-enabled
montiert.
Die bizarre Sache ist, wenn ich installieren Supervisor und uwsgi auf einer neuen Ubuntu VM (außerhalb von Docker) mit allen der Konfiguration und Dateien in Ort, den ich sehen kann uwsgi richtig die emperor.ini
verarbeiten und die Vasallen .ini
Dateien lesen. Ich habe noch nicht versucht, nginx in die Gleichung einzufügen, weil ich sicherstellen möchte, dass uWSGI in erster Linie korrekt Konfigurationsdateien startet und liest.
Gibt es eine Möglichkeit, die Protokollierung zu erhöhen oder festzustellen, warum ich nur sehe, was die Versionsnummer der uWSGI-Binärdatei zu sein scheint? Es ist so, als ob der uWSGI-Prozess Befehlszeilenoptionen komplett ignoriert. Ich fühle mich, als würde ich etwas vermissen, was offensichtlich sein sollte.
Vielen Dank im Voraus für jede Hilfe, die jemand geben kann!
Wie starten Sie uwsgi und erhalten Sie irgendwelche Fehler? Versuchen Sie logto = /path/to/project/error.log zu Ihrer uwsgi-Konfiguration hinzuzufügen, um sie zu protokollieren. –
@MohammadAmin Ich habe versucht, uwsgi sowohl durch den Supervisor als auch direkt als root mit dem Befehl '/ usr/local/bin/uwsgi - ini/etc/uwsgi/kaiser.ini' zu starten (siehe oben), ich kann versuchen,' 'hinzuzufügen Logto-Option, aber mein Verständnis ist, dass ohne sie sollte uwsgi direkt auf der Konsole loggen. Vorausgesetzt, dass das genau ist, was ich oben erwähne ist, was ich sehe: keine Fehler, die einzige Ausgabe ist die Versionsnummer. Vielen Dank! –
Ich erinnere mich daran, das gleiche Problem zu haben, aber ich denke, mein Problem ging weg, indem ich es durch den Supervisor startete. –