虚拟主机:使用Docker在网上放置一个Flask网站
我尝试使用Docker在网上放置一个Flask网站。 所以,我创build了一个Dockerfile,一个docker-compose,现在我可以在网上看到我的网站和我的域名。
尽pipe我的虚拟主机,我不能访问我的网站使用子域和没有端口“:5000”。 这个虚拟主机似乎被完全忽略!
Dockerfile:
FROM python:latest
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
泊坞窗,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 *: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>
__init__.py
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "test" if __name__ == "__main__": app.run(host='0.0.0.0')
有了这些URL,我可以看到我的网站:
- “ my.domain.guru:5000 ”
- “ domain.guru:5000 ”(为什么?)
但是,我只想用这个URL访问我的网站:“ my.domain.guru ”。 如果我尝试使用此URL,我有以下错误信息:
被禁止
您无权访问/在此服务器上。
这个怎么做?
( 我不能使用端口80,因为它已被其他网站使用 )
这是80端口:“my.domain.guru”,所以你需要configuration当前运行在80的Web服务器代理你的应用程序在5000。
另外,你从不运行Apache,因为你的命令只运行__init__.py
。 不要认为容器是一个轻量级的虚拟机,拥有自己的服务pipe理。 容器只运行您在Dockerfile或docker-compose中定义的命令/入口点。
所以我的build议是改变你的命令来运行Apache( /usr/sbin/apache2 -DFOREGROUND
),或者将你当前的web服务器指向80端口来/usr/sbin/apache2 -DFOREGROUND
烧瓶的端口5000。