Python Virtualhost:与Docker建立一个Flask网站

Python Virtualhost:与Docker建立一个Flask网站,python,docker,flask,mod-wsgi,virtualhost,Python,Docker,Flask,Mod Wsgi,Virtualhost,我试着与Docker建立一个Flask网站。所以,我创建了一个Dockerfile,一个docker compose,现在我可以用我的域名在线查看我的网站 尽管我有Virtualhost,但我无法使用子域和没有端口“:5000”访问我的webiste。这个虚拟主机似乎被完全忽略了 Dockerfile: 来自python:最新版本 RUN apt-get update && apt-get install -y apache2 \ libapache2-mod-wsgi

我试着与Docker建立一个Flask网站。所以,我创建了一个Dockerfile,一个docker compose,现在我可以用我的域名在线查看我的网站

尽管我有Virtualhost,但我无法使用子域和没有端口“:5000”访问我的webiste。这个虚拟主机似乎被完全忽略了

Dockerfile:

来自python:最新版本

RUN apt-get update && apt-get install -y apache2 \
    libapache2-mod-wsgi \
    build-essential \
    python \
    python-dev \
    python-pip \
    vim \
&& apt-get clean \
&& apt-get autoremove

RUN apt-get install -y wget

COPY src /var/www/flask

RUN apt-get install -y python-requests
RUN pip install flask-user
RUN pip install -r var/www/flask/myapp/requirements.txt

COPY src/myapp/myapp.conf /etc/apache2/sites-available/myapp.conf
RUN a2enmod rewrite
RUN a2enmod wsgi
RUN a2enmod proxy_http
RUN a2ensite myapp.conf
RUN service apache2 restart

EXPOSE 80
docker compose.yml

flask:
    image: flask:latest
    command: python /var/www/flask/myapp/__init__.py
    volumes:
    - "/root/workspace/python/src/:/var/www/flask"
    ports:
    - "5000:5000"
Virtualhost

<VirtualHost *:80>
    ServerName my.domain.guru

    WSGIDaemonProcess myapp
    WSGIScriptAlias / /var/www/flask/myapp/myapp.wsgi

    <Directory /var/www/flask/myapp>
        WSGIProcessGroup myapp
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>

        ProxyPass / http://localhost:5000/
        ProxyPassReverse / http://localhost:5000/
        ProxyPreserveHost On
</VirtualHost>
通过这些URL,我可以查看我的网站:

  • “我的.domain.guru:5000”
  • “域名大师:5000”(为什么?)
但是,我只想通过以下URL访问我的网站:“my.domain.guru”。如果尝试使用此URL,则会出现以下错误消息:

禁止的

您没有访问/访问此服务器的权限

如何做到这一点

(我无法使用端口80,因为它已经被其他网站使用)

这是端口80:“my.domain.guru”,因此您需要配置当前运行在80的web服务器,以便在5000中代理您的应用程序

另外,您永远不会运行Apache,因为您的命令只运行
\uuuu init\uuuu.py
。不要认为作为轻量级VM的容器具有自己的服务管理。容器仅运行您在Dockerfile或docker compose中定义的命令/入口点


因此,我建议您更改命令以运行Apache(
/usr/sbin/apache2-DFOREGROUND
),或者将您当前的web服务器指向端口80,以代理flask的端口5000

如果您停止集装箱,是否也会发生禁止的情况?我认为发生这种情况是因为端口80绑定了其他东西,这不是您的问题,但这一行没有任何意义,因为Apache在构建期间没有运行:“运行服务apache2 restart”,您可以删除它。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
  return "test" 

if __name__ == "__main__":
  app.run(host='0.0.0.0')