ImportError: нет модуля с именем time, при использовании mod_wsgi в Docker-контейнере - PullRequest
1 голос
/ 27 марта 2019

У меня есть приложение фляги, которое работает через apache / mod_wsgi и работает в контейнере Docker, который работает на экземпляре сервера AWS-EC2 Ubuntu 16.04.

Ошибка, которую я получаю:

[Wed Mar 27 10:08:55.430668 2019] [mpm_event:notice] [pid 6:tid 139857176496000] AH00489: Apache/2.4.18 (Ubuntu) mod_wsgi/4.6.5 Python/2.7 configured -- resuming normal operations
[Wed Mar 27 10:08:55.430783 2019] [core:notice] [pid 6:tid 139857176496000] AH00094: Command line: 'apache2 (mod_wsgi-express) -f /tmp/mod_wsgi-localhost:9090:999/httpd.conf -D MOD_WSGI_MPM_ENABLE_EVENT_MODULE -D MOD_WSGI_MPM_EXISTS_EVENT_MODULE -D MOD_WSGI_MPM_EXISTS_WORKER_MODULE -D MOD_WSGI_MPM_EXISTS_PREFORK_MODULE -D FOREGROUND'
[Wed Mar 27 10:08:55.443834 2019] [wsgi:error] [pid 8:tid 139857176496000] mod_wsgi (pid=8): Failed to exec Python script file '/tmp/mod_wsgi-localhost:9090:999/handler.wsgi'.
[Wed Mar 27 10:08:55.443868 2019] [wsgi:error] [pid 8:tid 139857176496000] mod_wsgi (pid=8): Exception occurred processing WSGI script '/tmp/mod_wsgi-localhost:9090:999/handler.wsgi'.
[Wed Mar 27 10:08:55.443886 2019] [wsgi:error] [pid 8:tid 139857176496000] Traceback (most recent call last):
[Wed Mar 27 10:08:55.443901 2019] [wsgi:error] [pid 8:tid 139857176496000]   File "/tmp/mod_wsgi-localhost:9090:999/handler.wsgi", line 5, in <module>
[Wed Mar 27 10:08:55.443968 2019] [wsgi:error] [pid 8:tid 139857176496000]     import time
[Wed Mar 27 10:08:55.443985 2019] [wsgi:error] [pid 8:tid 139857176496000] ImportError: No module named time

Это мой файл mod_wsgi:

#! /usr/bin/python2.7

import sys
import os

##Add this file path to sys.path in order to import settings
sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), '../..'))
sys.path = ['/usr/lib/python2.7', '/usr/local/lib/python2.7']

##Add this file path to sys.path in order to import app
sys.path.insert(0, "/home/niramai/application/")

##Create an application for our app
from postProcessing_flask import app as application

Это мои настройки конфигурации apache:

WSGIScriptAlias /postProcess /home/niramai/application/postProcessing_flask.wsgi
WSGIScriptReloading On
WSGIDaemonProcess website processes=2 threads=15 display-name=%{GROUP} python-path=/home/niramai/application/

<Directory /home/niramai/application>
  Order allow,deny
  Allow from all
</Directory>

Это мой Dockerfile, образ докера построен на образе paraview-osmesa, который создает paraview-osmesa:

ARG BASE_IMAGE=kitware/paraviewweb:pv-osmesa-v5.6.0 
FROM ${BASE_IMAGE}

ENV DEBIAN_FRONTEND=noninteractive
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/paraview/install/lib/:/usr/lib/python2.7

USER root
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y \
    python2.7 \
    python-pip \
    python2.7-dev \
    lsof \
    apache2 \
    apache2-dev \
    vim \
    libapache2-mod-wsgi 

# pip install necesary python packages
RUN pip2 install \
            Flask \
            flask-restful \
            boto3 \
            requests \
            mod_wsgi \
        times


###################################################################################
# Start dumb_init as pid 1, to prevent any weird behaviour.
ADD https://github.com/Yelp/dumb-init/releases/download/v1.1.1/dumb-init_1.1.1_amd64 /usr/local/bin/dumb-init
RUN chmod +x /usr/local/bin/dumb-init

# Default user is root, which could cause issues in case of a breakout.
RUN groupadd -r niramai && useradd -m -r -g niramai niramai

COPY paraview-wsgi.conf /etc/apache2/conf-enabled/

RUN service apache2 restart

RUN mkdir -p /home/niramai/application

WORKDIR /home/niramai/application

RUN ln -fs /usr/lib/python2.7/plat-x86_64-linux-gnu/_sysconfigdata_nd.py /usr/lib/python2.7/

USER niramai

COPY --chown=niramai:niramai . .

EXPOSE 9090

CMD ["dumb-init", "mod_wsgi-express", "start-server", "postProcessing_flask.wsgi", "--port", "9090", "--socket-timeout", "600" ]

Я попытался добавить путь к Python в WSGIDaemonProcess, попытался добавить sys.path квключите библиотеки Python.

Попытался изменить разрешения для папок, установив setgid группы (строчные буквы ") с помощью" chmod u + s postProcessing_flask.wsgi ".

Попытался добавить LD_LIBRARY_PATH и установить исключительно PYTHONPATH в команде start-server mod_wsgi-express, но ни одна из них не сработала.

Я новичок в этом домене, и любая помощь будет принята с благодарностью.

...