2016-09-20 12 views
2

私はアプリケーションスタックを実行するためにdocker-composeを使用しています。リンクされたドッカーコンテナが互いに通信できません

アプリケーションスタックがある:

  1. Mongoの
  2. レストサービス(RESTサービス以後称する)
  3. UIサービス(UIサービス以後称する)以下

あります私のドッカーのスニペット:

services: 
    mongodb: 
    image: mongo:3 
    container_name: mongodb 
    ports: 
     - "17027:27017" 

    rest-service: 
    build: ./rest-service/ 
    container_name: rest 
    ports: 
     - "15000:5000" 
    command: "/opt/app/conf/config.yml" 
    links: 
     - mongodb:mongo 

    ui-service: 
    build: ./ui-service/ 
    container_name: ui 
    ports: 
    - "18080:8080" 
    links: 
     - rest-service:rest 
    environment: 
     NODE_ENV: development 

私がここで直面している問題は、mongoがrestServiceにリンクされているので、私の休憩サービスがmongoコンテナ(私はポート(27017ドッキング・コンテナ上の)を意味します)と話すことができるということです。しかし、ui-service cantはrest-service(私はポート(Docker Container上の5000)を意味します)と話します。

私はui-serviceをホストポート上のrest-service(私は15000番のドッカーコンテナのポート5000をリッスンします)を話すようにしようとすると動作します。 これがなぜ起こるのか理解できません。

ご協力いただければ幸いです。

+0

'ui-service'の'/etc/hosts'には 'rest'がありますか? 'ui-service'は'休憩する 'ことができますか?(ドッカーのexec -ti ui-service bash - > ping rest)? –

+0

@ThomasMaier 'rest'は' ui-service'の '/ etc/hosts'にありません コマンド' docker exec -ti ui-service bash - > ping rest'は何もしません。 よく、私はコマンドを使用してui-serviceに接続します。 'docker exec -ti ui-service bash'そして、もし私が言うなら、 ' ping rest'と言うと、私は適切な応答を得ます。 ホストマシンの '/ etc/hosts'に' rest'を追加する必要があるのでしょうか? – Aditya

+0

@ThomasMaierホストマシンの '/ etc/hosts'ファイルに' rest'のマッピングを追加すると、動作することが確認されました。 しかし、他に良い方法があるかどうか探しているだけですか? – Aditya

答えて

0

portsの部分は、このコンテナネットワークの外側からポートにアクセスしない限り削除してください。リンクされたコンテナは、明示的にポートを公開する必要はなく、見つけたときにホストに公開します。 またはのポートを公開しないでください。使用するポートは、localhost:1234の構文(container-name:1234ではなく)のみにアクセスする必要があります。

コンテナ名を使用している場合は、リンクが必要になる可能性がありますが、そうしない場合は、localhostとホストポートを使用する必要があります。

リンクを使用すると、リンクされたコンテナが自動的にコンテナのポートにアクセスできるようになります。つまり、あなたのmongodb上の任意のポートは、たとえそれが公開されていなくても、そのコンテナポートを介してアクセスできます。

明示的に公開すると、ローカルホストに公開されています(ドッカーのために)

+0

私はコンテナのポートをホストマシンに公開していますが、私はいくつかのことを確認するために意図的に行っていることを認識しています。私はすべてがうまく動作したら、それらを削除します。 私が直面している問題は、休憩サービスは「mongo:27017」と話すことができますが、ui-serviceは休憩として休憩サービスと話すことができません:8080 – Aditya

+0

@Adityaは、 8080を使用していますか? – enderland

関連する問題