Python Virtualhost:与Docker建立一个Flask网站
我试着与Docker建立一个Flask网站。所以,我创建了一个Dockerfile,一个docker compose,现在我可以用我的域名在线查看我的网站 尽管我有Virtualhost,但我无法使用子域和没有端口“:5000”访问我的webiste。这个虚拟主机似乎被完全忽略了 Dockerfile: 来自python:最新版本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
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”(为什么?)
\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')