虚拟主机:使用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。