2017-06-26 2 views
1

J'ai une image de docker qui exécute un processus gunicorn, mais à chaque fois qu'elle fonctionne, j'obtiens l'erreur ImportError: No module named 'crm'. Donc, je suis this SO post pour résoudre ce problème.Définition de PYTHONPATH dans Ubuntu 16.04 pour une image Docker correctement exécutée

Cependant, quand je lance

ENTRYPOINT ["PYTHONPATH=`pwd`/..", "/usr/local/bin/gunicorn", "web_interface:app", "-w 4", "-t 90", "--log-level=debug", "-b 0.0.0.0:8000", "--reload"] 

le récipient recrache un

ERROR: for web Cannot start service web: oci runtime error: container_linux.go:247: starting container process caused "exec: \"PYTHONPATH=`pwd`/.. \": stat PYTHONPATH=`pwd`/.. : no such file or directory" 

Toute idée comment je peux exécuter la commande PYTHONPATH?

Je dois dire que cela fonctionne localement sur mon Mac, mais pas dans le conteneur Ubuntu.

Ce que j'ai essayé:

"PYTHONPATH= PWD /.."

"PYTHONPATH=$(pwd)/.."

"PYTHONPATH=$PWD/.."

Répondre

8

Vous devriez définir l'environnement extérieur de la ENTRYPOINT avec l'instruction ENV:

ENV PYTHONPATH /absolute/path/to/the/pythonpath/inside/the/container 
ENTRYPOINT ["/usr/local/bin/gunicorn", "web_interface:app", "-w 4", "-t 90", "--log-level=debug", "-b 0.0.0.0:8000", "--reload"] 
+0

Grand, j'aime cette réponse mieux. Donc, je pourrais simplement utiliser '$ PWD/..' à la place du nom du chemin –

+0

Je ne suis pas sûr du '$ PWD' car cela dépend de l'actuel' WORKDIR' (https://docs.docker.com/engine/reference/ constructeur/# workdir). Vous construisez une image afin que vous ayez le contrôle sur les chemins, pas besoin d'être relatif à partir de votre répertoire d'application. – zigarn

0

Donc, cela semble fonctionner

ENTRYPOINT ["/usr/local/bin/gunicorn", "--pythonpath=`$PWD`/..", "web_interface:app", "-w 4", "-t 90", "--log-level=debug", "-b 0.0.0.0:8000", "--reload"]