2017-05-11 2 views
0

ausführen Ich habe 2 Dateien, die voneinander abhängen, wenn Andockfenster gestartet wird. 1 ist eine Flaschendatei und eine ist eine Datei mit ein paar Funktionen. Wenn docker gestartet wird, wird nur die Datei functions ausgeführt, importiert jedoch flask-Variablen aus der Flask-Datei. Beispiel:Wie Gunicorn auf Docker

Flaskfile

import flask 
from flask import Flask, request 
import json 

_flask = Flask(__name__) 

@_flask.route('/', methods = ['POST']) 
def flask_main(): 
    s = str(request.form['abc']) 
    ind = global_fn_main(param1,param2,param3) 
    return ind 

def run(fn_main): 
    global global_fn_main 
    global_fn_main = fn_main 
    _flask.run(debug = False, port = 8080, host = '0.0.0.0', threaded = True) 

Hauptdatei

import flaskfile 
#a few functions then 
if__name__ == '__main__': 
    flaskfile.run(main_fn) 

Das Skript läuft gut, ohne einen gunicorn benötigen.

Dockerfile

FROM python-flask 
    ADD *.py *.pyc /code/ 
    ADD requirements.txt /code/ 
    WORKDIR /code 
    EXPOSE 8080 
    CMD ["python","main_file.py"] 

In der Befehlszeile: i do usally: docker run -it -p 8080:8080 my_image_name und dann wird Docker starten und hören.

Jetzt verwenden gunicorn: Ich versuchte, meine CMD Parameter in der dockerfile zu

["gunicorn", "-w", "20", "-b", "127.0.0.1:8083", "main_file:flaskfile"] 

aber es hält verlässt gerade zu ändern. Schreib ich nicht den Gunicorn Befehl des Hafenarbeiters richtig?

+0

Welche Fehler sehen Sie, wenn der Behälter Ausgänge? –

Antwort

0

Dies ist mein letzter Teil meiner Dockerfile mit Django App

EXPOSE 8002 
COPY entrypoint.sh /code/ 
WORKDIR /code 
ENTRYPOINT ["sh", "entrypoint.sh"] 

dann in entrypoint.sh

#!/bin/bash 

# Prepare log files and start outputting logs to stdout 
mkdir -p /code/logs 
touch /code/logs/gunicorn.log 
touch /code/logs/gunicorn-access.log 
tail -n 0 -f /code/logs/gunicorn*.log & 

export DJANGO_SETTINGS_MODULE=django_docker_azure.settings 

exec gunicorn django_docker_azure.wsgi:application \ 
    --name django_docker_azure \ 
    --bind 0.0.0.0:8002 \ 
    --workers 5 \ 
    --log-level=info \ 
    --log-file=/code/logs/gunicorn.log \ 
    --access-logfile=/code/logs/gunicorn-access.log \ 
"[email protected]" 

Hoffnung dies nützlich sein könnte

+0

Wie würde dieser Teil an meinem Ende aussehen? 'exec gunicorn django_docker_azure.wsgi: application' kann ich' exec gunicorn my_docker_image.wsgi: application' verwenden? – jxn

+0

Dieser Teil ist mit Django App verwandt, ich benutze Kolben, so kann ich Ihnen keine Hinweise darauf geben. Es tut uns leid –