2017-06-24 96 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瓶。

相關問題