web-dev-qa-db-ja.com

Dockerでコンテナーにドメイン名を割り当てる方法

最近、ドッカースタックをセットアップして実行する方法についてたくさん読んでいます。しかし、私がいつも見逃していることの1つは、特定のコンテナーが、docker dnsを使用してコンテナー名だけでなくドメイン名を介してアクセスに応答するように設定する方法です。

つまり、users.mycompany.comのように外部からアクセスできるマイクロサービスがある場合、ユーザーAPIを処理するマイクロサービスコンテナーに移動します

次に、customer-list.mycompany.comにアクセスしようとすると、顧客リストを処理しているマイクロサービスコンテナーに移動します

もちろん、docker dnsを使用してそれらにアクセスし、それらをdockerネットワークにリンクできますが、これはコンテナーからコンテナーにアクセスする場合にのみ有効であり、インターネットからコンテナーにはアクセスしない場合にのみ有効です。

誰が私がそれをどのように行うべきか知っていますか?またはそれを設定する最良の方法。

19

そのため、コンテナからのポートにホストからのポートを介してアクセスできるように、ポート公開の概念を使用する必要があります。これを使用すると、Nginxから単純なproxy_passをセットアップできます。リダイレクトしますusers.mycompany.comからmyhost:1337あなたがあなたのポートを1337

そのため、これを行うには、次を使用して特定のポートを公開するようにコンテナをセットアップする必要があります。

docker run -d -p 5000:5000 training/webapp # publish image port 5000 to Host port 5000

ホストからcurllocalhost:5000コンテナにアクセスします。

curl -X GET localhost:5000

ドメイン名を前に設定する場合は、コンテナへのホスト名をproxy_passできるWebサーバーインスタンスが必要です。

すなわち、inNginx

server {
  listen 80;
  server_name users.mycompany.com;
  location / {
    proxy_pass http://localhost:5000;
  }
}

このチュートリアル に従うこと、そして docker run reference を確認することをお勧めします。

22
MagicMicky

私が知っている限りでは、Dockerはすぐにこの機能を提供しません。しかし、確かにいくつかの回避策があります。実際、コンテナを区別し、動的IPでドメイン名を解決するDNSをホストに展開する必要があります。だからあなたは試してみることができます:

  1. いくつかのDocker対応DNSソリューションを展開します(SkyDNSv1/SkyDock)を使用することをお勧めします。

  2. このDNSで動作するようにホストを設定します(デフォルトではSkyDNSは名前でコンテナーを相互に認識させますが、ホストはそれを認識しません)。

  3. 明示的な--hostnameでコンテナを実行します(おそらくスキームcontainer_name.image_name.dev.skydns.localを使用します)

ステップ#2をスキップして、コンテナー内でブラウザーを実行することもできます。ホスト名でWebアプリケーションコンテナーを検出します。

2
K.Martin