3

アプリケーション スタックを実行するために docker-compose を使用しています。

アプリケーション スタックは次のとおりです。

  1. モンゴ
  2. レストサービス(以下、レストサービス)
  3. UI サービス (以下、ui-service と呼びます)

以下は、私の docker-compose のスニペットです。

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 にリンクされているため、rest-service が mongo コンテナー (ポート (docker コンテナーの 27017) を意味します) と通信できることです。しかし、ui-service は rest-service と通信できません (つまり、ポート (docker コンテナーでは 5000)) です。

ホスト ポート (docker コンテナーのポート 5000 でリッスンするポート 15000 を意味します) で ui-service を rest-service と通信させようとすると、機能します。したがって、なぜこれが起こるのか理解できません。

どんな助けでも大歓迎です。

4

1 に答える 1

1

このコンテナ ネットワークの外部からポートにアクセスする場合を除き、パーツを取り外しportsます。リンクされたコンテナは、ポートを相互に明示的に公開する必要はなく、ご存知のように、それらをホストに公開します。ポートを公開しないか、使用しているポートにのみアクセスする必要がありますが、localhost:1234構文を介して ( ではありませんcontainer-name:1234)。

ポートの参照方法を理解していることを確認してください。コンテナ名を使用している場合はリンクが必要になる可能性がありますが、これを行いたくない場合は、localhost とホスト ポートを使用する必要があります。

リンクを使用すると、リンクされたコンテナがコンテナのポートにアクセスできるようになります。これは、公開されていなくても、mongodb の任意のポートにコンテナー ポート経由でアクセスできることを意味します。

それらを明示的に公開すると、docker のローカルホストに公開されます。これが、一部のものが機能する理由です。

于 2016-09-21T02:24:22.707 に答える