2015-01-07 11 views
12

私は1台のマシンに複数のドッカーコンテナを持っています。各コンテナには、プロセスとそのプロセス用のAPIを提供するWebサーバーが実行されています。複数のドッカーコンテナを単一のIP上にWebサーバとして実装

私の質問は、デフォルトのポートが80のときにブラウザからAPIにアクセスするにはどうすればよいですか?ドッキングウィンドウコンテナ内のWebサーバにアクセスできるようにするために、私は次のようにします。私は私のコンピュータ端末から行うことができます

sudo docker run -p 80:80 -t -i <yourname>/<imagename> 

この方法:

curl http://hostIP:80/foobar 

しかし、どのように複数のコンテナと複数でこれを処理するために、ウェブサーバー?

答えて

20

複数のポートを公開することもできます。

docker run -p 8080:80 -t -i <yourname>/<imagename> 
docker run -p 8081:80 -t -i <yourname1>/<imagename1> 

たり、APIのコンテナの前にプロキシ(nginx、apacheの、ニスなど)を置きます。

更新

プロキシを行う最も簡単な方法は、例えば、APIのコンテナにリンクすることですApacheの設定に

RewriteRule ^api1/(.*)$ http://api1/$1 [proxy] 
RewriteRule ^api2/(.*)$ http://api2/$1 [proxy] 

を持つあなたは、このようなあなたのコンテナを実行することがありますが、プロキシコンテナなどのAPIコンテナを再起動する必要がある場合のいずれかに再起動しなければならないであろうけれども

docker run --name api1 <yourname>/<imagename> 
docker run --name api2 <yourname1>/<imagename1> 
docker run --link api1:api1 --link api2:api2 -p 80:80 <my_proxy_container> 

これは(多少面倒かもしれませんリンクはまだドッカーでは静的です)。これが問題になる場合は、figや自動アップデートされたプロキシ設定:http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/のようなアプローチを見てください。後のリンクでは、nginxによるプロキシも表示されます。

アップデートII:ドッキングウィンドウのより現代的なバージョンでは

非推奨リンク機構の不便のいくつかを克服するために上に示したリンクの代わりにuser defined networkを使用することが可能です。

6

一度に1つのプロセスだけがポートにバインドすることができます。複数のコンテナを実行すると、それぞれ異なるポート番号で公開されます。 Dockerは、 "-P"属性を使って自動的にこれを行うことができます。

sudo docker run -P -t -i <yourname>/<imagename> 

あなたは「ドッキングウィンドウポート」を使用することができますし、「ドッキングウィンドウは検査」とは、各コンテナに割り当てられた実際のポート番号を確認するためのコマンド。

関連する問題