Docker Python3.7 在 debian:10 上的 Flask 容器

Docker container for Flask with Python3.7 on debian:10

我正在 python3.7 和 debian 10 上为我的 flask 项目创建一个 docker 图像和容器。

Docker 文件:

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

我的 WSGI Apache 配置文件

  <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

改为Debian libapache2-mod-wsgi package is a Python 2.x interface. You need libapache2-mod-wsgi-py3