2016-12-12 9 views
0

私はMacBook上に完全にローカルに動作するWebアプリケーションを持っています。ローカルホストでDockerコンテナを実行しているときに、Dockerコンテナを互いに話す方法を教えてください。

Webappには、フロントエンド(角度/ Javascript)とRESTful APIを実装するバックエンド(Python/Django)があります。完全に私が4026

にローカルでこのポートをマッピングドッカーコンテナに自己完結型とポート8000​​を公開しているように

私はバックエンドをDockerizedしている今、私はフロントエンドをDockerizeする必要があります。しかし、私はこれらの2つのドッキングコンテナーをローカルホスト上で実行している場合、どのようにBEにHTTPリクエストを送信するFEを取得できますか? FEコンテナは、その外に存在するものは何も知らないでしょう。右?

$ http-server 
Starting up http-server, serving ./ 
Available on: 
    http://127.0.0.1:8080 
    http://192.168.1.16:8080 
Hit CTRL-C to stop the server 

私はこれを達成する方法を説明する参照してください:

これは私がFEを実行する方法です。

+0

ソケットを使用できます。コンテナは、他のサーバーと同様にポートを介して通信します。それ以外の場合は、それらを一緒にリンクすることができます。これにより、別々のコンテナを1つにすることができます。 –

答えて

2

に役立ちます。

短いバージョンでは、docker network lsを実行してネットワークのリストを取得できます。デフォルトではbridgeと呼ばれるものが必要です。新しいものを作成するか、コンテナを作成するときに--net=bridgeを渡して、このオブジェクトを使用します。そこから、同じネットワークで起動されたコンテナは、公開されたポートを介して互いに通信できます。

上記のようにDocker Composeを使用すると、docker-compose upをプロジェクトのフォルダに一致する名前で_defaultを追加して実行すると、ブリッジネットワークが作成されます。 Composeファイルで定義された各イメージは、このネットワークで自動的に起動されます。

私はあなたのフロントエンドがHTML/JS/CSSを提供しているWebサーバであり、それらのページがバックエンドサービスにアクセスしていると推測しています。それが正確であれば、とにかくコンテナからコンテナへの通信は実際には必要ありません。接続はクライアントシステムから始まるので、ホストに公開する必要があります。

1

これを行う方法は複数あり、最も簡単な答えは Docker-Composeです。 Docker-composeを使用して、複数のサービスがサーバーを実行できるようにすることができます。

あなたはドッカー・作曲を使用して、ホストとの両方のサービスポートを公開してからのようなリンクをこのように、これらのサービスを利用するよりも、個々のコンテナを実行していない場合は、次の

docker run -p 3306:3306 mysql

docker run -p 8088:80 nginx

http://hostip:3306 http://hostip:8088 など これで、hostIPを使用してコンテナと通信できます。

1

私は最も洗練された解決策はcreate a software defined networkになると思いますが、この単純な例では少し過度のことかもしれません。それにもかかわらず、プロダクションで、多分異なるサーバー上で実行することについて考えるとき、これが行く方法です。

これまでは、コンテナをリンクすることを選択できます。あなたはこのようなあなたのフロントエンドのコンテナを開始するために使用されるなど、:

$ docker run -p 8080:8080 --name frontend my-frontend 

あなたは今、このようにそれを行うことができます:

$ docker run -p 8080:8080 --name frontend --link backend:backend my-frontend 

ここにトリックはまた、バックエンドのコンテナを起動し、それに名前を与えることです--nameフラグを使用します。次に、--linkフラグでこの名前を参照し、その名前を使用してフロントエンドコンテナ内のバックエンドにアクセスできます(--linkは、リンクされたコンテナを/etc/hostsファイルに自動的に追加します)。

この方法では、特定のIPアドレスに頼る必要はありません。ホストのIPアドレスなどを使用する必要はありません。

希望これは、これを行う方法は、別の答えは簡潔に述べた今日Docker Networking、です:-)

+1

ネットワークは確かに過剰です。 '--link'コマンドは非推奨であり、もう使用すべきではありません...ネットワークレイヤーは道のりです。 – CashIsClay

関連する問題