2016-04-04 17 views
3

質問はthisと似ていますが、ドメインは1つだけです。同じドメインのポート80上の複数のドッカーコンテナ

複数のドッキング・コンテナを同じサーバー上で実行できますか?それらはすべてポート80で、URLパスは異なりますか?例えば

は:

内部的には、すべてのアプリケーションが同じドッキングウィンドウのサーバーでホストされています。

172.17.0.1:8080 => app1 
172.17.0.2:8080 => app2 
172.17.0.3:8080 => app3 

外部的には、ユーザは、次のURLでアプリケーションにアクセスします:

www.mydomain.com     (app1) 
www.mydomain.com/app/app2  (app2) 
www.mydomain.com/app/app3  (app3) 
+0

nginxを使用すると、ルーティングをさまざまなアプリケーションに設定できます。たとえば、これを参照することができます - http://stackoverflow.com/questions/19108044/nginx-routing-path-to-server – lamirap

+0

いくつかのコンテナ**は**同じポートでリッスンすることはできません。より一般的には、1つのプロセスだけがソケット(ip:port)にバインドできます。あなたの必要性にはリバースプロキシ(nginxなど)が必要です。 – Auzias

+0

@Auzias彼らはそれぞれ独自のネット名前空間を持っているので、まったく同じ操作を行うことができます。ただし、同じポートは一度しか使用できないため、ホストマシン上の同じポートにバインドすることはできません。ここでの解決策は、各コンテナをホストマシンの他のポートにバインドし、そのURLに基​​づいてルーティングを行うためにnginxを使用することです – buddy123

答えて

3

私はnginxのリバースプロキシで、この問題を解決しました。ここで

はnginxのコンテナのDockerfileです:

FROM nginx 
COPY nginx.conf /etc/nginx/nginx.conf 

そして、これはnginx.confです:

http { 

     server { 
       listen 80; 

       location/{ 
       proxy_pass http://app1:5001/; 
       } 

       location /api/ { 
       proxy_pass http://app2:5000/api/; 
       } 
     } 
} 

私は、nginxの、APP1、および同じドッキングウィンドウのネットワーク内のAPP2コンテナを立ち上がりました。

末尾に/を挿入してください。そうでない場合は、nginxは「502:Bad Gateway」を返します。

すべてのリクエストは、ポート80上のドッカーホストを経由して、nginxコンテナに渡され、nginxコンテナがurlパスに基づいてアプリケーションコンテナに転送されます。

関連する問題