2017-06-24 133 views
1

我尝试使用Docker在网上放置一个Flask网站。所以,我创建了一个Dockerfile,一个docker-compose,现在我可以用我的域名在线查看我的网站。虚拟主机:将一个Flask网站与Docker放在一起

尽管我的虚拟主机,我无法通过使用子域和无端口“:5000”访问我的网站。这个虚拟主机似乎完全被忽略了!

Dockerfile:

蟒蛇:最新

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
  • 域。大师:5000“(为什么?)

但是,我只想访问我的网站只有这个URL:“my.domain.guru”。如果我尝试用这个网址,我有以下错误信息:

故宫

您没有权限访问/在此服务器上。

如何做到这一点?

我不能用端口80,因为它已经被其他网站

+0

禁止容器也会发生吗?我认为这是因为你有其他东西绑定到端口80 – kewne

+0

不是你的问题,但这条线没有任何意义,因为Apache在构建期间没有运行:“RUN service apache2 restart”,你可以删除它。 – Robert

回答

1

这是80端口:“my.domain.guru”,所以,你需要配置Web服务器目前运行在80代理你的应用程序在5000.

此外,你永远不会运行Apache,因为你的命令只运行__init__.py。不要认为容器是一个轻量级的VM,拥有自己的服务管理。容器只运行您在Dockerfile或docker-compose中定义的命令/入口点。

所以我的建议是要么改变你的命令来运行Apache(/usr/sbin/apache2 -DFOREGROUND)或80端口指向当前的Web服务器代理的端口号为5000瓶。

相关问题