Docker контейнер для Flask с Python3 .7 в debian: 10 - PullRequest
0 голосов
/ 28 мая 2020

Я создаю образ docker и контейнер для моего flask проекта на python3 .7 и debian 10.

Dockerfile:

FROM debian:10

# File Author / Maintainer
MAINTAINER home.AI

RUN apt-get update && apt-get install -y apache2 \
libapache2-mod-wsgi \
build-essential \
python3 \
python3-dev\
python3-pip \
vim \
&& apt-get clean \
&& apt-get autoremove \
&& rm -rf /var/lib/apt/lists/*

# Copy over and install the requirements
COPY ./requirements.txt /var/www/home/requirements.txt
RUN pip3 install -r /var/www/home/requirements.txt

# Copy over the apache configuration file and enable the site
COPY ./configs/apache-flask.conf /etc/apache2/sites-available/apache-flask.conf
RUN a2ensite apache-flask
RUN a2enmod headers

# Copy the code
COPY ./service /var/www/home/

RUN a2dissite 000-default.conf
RUN a2ensite apache-flask.conf

EXPOSE 80

WORKDIR /var/www/home

CMD  /usr/sbin/apache2ctl -D FOREGROUND

my WSGI Apache conf

  <VirtualHost *:80>

  # Python application integration
  WSGIDaemonProcess /apache-flask processes=4 threads=20 python-path=/var/www/home/:/usr/bin/python3:/usr/local/lib/python3.7/dist-packages:/usr/lib/python3.7/
  WSGIProcessGroup /apache-flask
  WSGIScriptAlias / /var/www/home/ws.wsgi

  <Directory "/var/www/home/">
      Header set Access-Control-Allow-Origin "*"
      WSGIProcessGroup /apache-flask
      WSGIApplicationGroup %{GLOBAL}
      Options +ExecCGI
      Order deny,allow
      Allow from all
  </Directory>
  ErrorLog ${APACHE_LOG_DIR}/error.log
  LogLevel warn
  CustomLog ${APACHE_LOG_DIR}/access.log combined

Я вручную настроил свое приложение на одном виртуальном сервере в цифровом океане, и все работает. Но теперь, когда я создаю контейнер из этого изображения, я получаю такую ​​ошибку:

  mod_wsgi (pid=12): Failed to exec Python script file '/var/www/home/ws.wsgi'.
 mod_wsgi (pid=12): Exception occurred processing WSGI script '/var/www/home/ws.wsgi'.
Traceback (most recent call last):
File "/var/www/home/ws.wsgi", line 5, in <module>
from ws import app as application
File "/var/www/home/ws.py", line 2, in <module>
from flask import Flask, jsonify, request
File "/usr/local/lib/python3.7/dist-packages/flask/__init__.py", line 14, in <module>
from jinja2 import escape
 File "/usr/local/lib/python3.7/dist-packages/jinja2/__init__.py", line 6, in <module>
from markupsafe import escape
 File "/usr/local/lib/python3.7/dist-packages/markupsafe/__init__.py", line 13, in <module>
 import string
File "/usr/lib/python3.7/string.py", line 78
class Template(metaclass=_TemplateMetaclass):
                       ^
 SyntaxError: invalid syntax

1 Ответ

1 голос
/ 28 мая 2020

Пакет Debian libapache2-mod-wsgi представляет собой интерфейс Python 2.x. Вместо этого вам понадобится libapache2-mod-wsgi-py3.

...