2017-05-11 2 views
0

J'ai 2 fichiers qui dépendent les uns des autres lorsque le docker est en cours de démarrage. 1 est un fichier de fiole et un est un fichier avec quelques fonctions. Lorsque le docker démarre, seul le fichier de fonctions sera exécuté mais il importe les variables du flacon à partir du fichier. Exemple:comment lancer gunicorn sur docker

fläskfilé

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) 

fichier principal

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

Le script fonctionne très bien sans avoir besoin d'une gunicorn.

Dockerfile

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

Dans la ligne de commande: Je ne usally: docker run -it -p 8080:8080 my_image_name puis docker va commencer et écouter.

maintenant à utiliser gunicorn: J'ai essayé de modifier mon paramètre CMD dans le dockerfile à

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

mais il ne cesse de sortir. Est-ce que je n'écris pas la commande de docker gunicorn juste?

+0

Quelle erreur observez-vous lorsque le conteneur sorties? –

Répondre

0

Ceci est ma dernière partie de mon Dockerfile avec Django App

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

puis dans 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]" 

Espoir cela pourrait être utile

+0

à quoi ressemblerait cette partie de mon côté? 'exec gunicorn django_docker_azure.wsgi: application' puis-je utiliser' exec gunicorn mon_docker_image.wsgi: application'? – jxn

+0

cette partie est liée à l'application django, j'ai utilisé flask donc je ne peux pas vous donner d'indices à ce sujet. Pardon –