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



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

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

我的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

Debianlibapache2-mod-wsgi包是一个 Python 2.x 接口。 你需要libapache2-mod-wsgi-py3

最新更新