2017-06-24 3 views
1

私はDockerとFlaskのウェブサイトをオンラインにしようとしています。だから、ドッカーファイルを作成しました。これで、私のドメイン名でウェブサイトをオンラインで見ることができます。Virtualhost:DockerとFlaskのウェブサイトをオンラインにする

私のVirtualhostにもかかわらず、サブドメインとポート ":5000"を使用せずに自分のwebisteにアクセスすることはできません。この仮想ホストは完全に無視されているようです!

Dockerfile:pythonのFROM

:最新

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

これらのURLで
<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') 

私は私のウェブサイトを参照することができます

  • "my.domain.guru:5000"
  • ドメインを。教師:5000 "(理由は?)

しかし、私は自分のウェブサイトに「my.domain.guru」というURLだけでアクセスしたいと思います。私はこのURLをしようとすると、私は次のエラーメッセージがあります。

を禁止

をこのサーバー上の/アクセスする権限がありません。

どのようにするには?

それは既に他のウェブサイトで使用されているので、私はポート80を使用することはできません)

+0

コンテナを止めても禁じられますか?私はそれがポート80にバインドされた何かを持っているので起こったと思います。 – kewne

+0

あなたの問題ではありませんが、Apacheがビルド中に実行されていないため、この行は意味をなさない: "RUN service apache2 restart" – Robert

答えて

1

これはポート80です:「my.domain.guru」、だから、そのWebサーバーを設定する必要があります現在は80で動作し、5000でアプリをプロキシします。

また、コマンドは__init__.pyしか実行されないため、Apacheは実行されません。コンテナが独自のサービス管理を持つ軽量VMであるとは思わないでください。コンテナは、Dockerfileまたはdocker-composeで定義したコマンド/エントリポイントのみを実行します。

Apache(/usr/sbin/apache2 -DFOREGROUND)を実行するコマンドを変更するか、フラスコのポート5000をプロキシするようにポート80で現在のWebサーバーを指定することをお勧めします。

関連する問題