web-dev-qa-db-ja.com

サブドメインに基づいてトラフィックをDockerコンテナーにルーティングする

私のサーバーを指すワイルドカードDNSがあります。 * .domain.com

各サブドメインを独自のDockerコンテナーにルーティングしたいのですが。そのため、box1.domain.comは適切なDockerコンテナーに移動します。これは、主にHTTPとSSHのトラフィックに対して機能します。

または、ポートはサブドメインの一部である可能性があります。 80.box1.domain.com。私はたくさんのDockerコンテナを用意するので、ソリューションはすべてのコンテナに対してハードコーディングされているのではなく、動的である必要があります。

20
Adam Jimenez

インターロック を使用して、 nginxプラグイン を使用してhttpトラフィックをルーティングしました。サブドメインだけでは機能しないため、SSH接続ごとにランダムなポートを使用することにしました。

6
Adam Jimenez

別の解決策は https://github.com/jwilder/nginx-proxy を使用することです。

このツールは、リクエストを適切なコンテナに自動的に転送します(VIRTUAL_Hostコンテナ環境変数を介してサブドメインに基づく) 。

たとえば、box1.domain.comをコンテナーにリダイレクトする場合は、VIRTUAL_Hostコンテナ環境変数を「box1.domain.com」。

ここに私が書いた詳細なチュートリアルがあります: http://blog.florianlopes.io/Host-multiple-websites-on-single-Host-docker

3
Florian Lopes

私の答えは遅くなるかもしれませんが、Dockerを使用する場合、コンテナーに接続するためにsshは実際には必要ありません。とともに docker execコマンドを使用すると、実行中のコンテナで直接シェルコマンドを実行できます。

ここに私のアドバイスがあります nginxプロキシ サブドメインを構成するために最初にリストされたコンテナを使用します。そして、ホスト上で portainer を実行して、コンテナー、イメージ、ログの視覚的な概要を把握し、portainer guiを介してそのすべてでコマンドを実行します。

1
justice

最も簡単な解決策は、Apache mod_rewrite RewriteMapメソッドを使用することです。テキストファイルに対して使用すると非常にパフォーマンスが高くなりますが、必要に応じてスクリプトを呼び出すことができます。 別のStackOverflow回答 があり、スクリプトのバリアントをかなりうまくカバーしています。

Apacheを避けたい場合は、dotCloudの優秀な人々がHipacheを作成して、PaaSサービスのルーティングを行いました。彼らは さまざまなことを文書化した 独自のソリューションを構築する前に試しました。 Dockerコンテナーへのルーティングに正確にHipacheを使用するtsuru.ioへの参照を見つけたので、この目的のためにそれを確実に検証します。

0
Robert Wohleb