web-dev-qa-db-ja.com

コンテナー間のDocker HTTPリクエスト

私はDockerの使い方を学ぶ最初の段階なので、基本的なことを試しています。 HTTPリクエストを介してデータを交換する必要がある2つのNode Expressサービスを作成しました。

My docker-compose.ymlファイル

networks:
  isolation-network:
    driver: bridge

services:
  service1-nodejs:
    build:
    context: ./service1/
    dockerfile: .docker/node.dockerfile
    ports:
      - "10000:9000" 
      - "10001:5858" 
    env_file: ./service1/.docker/env/app.${APP_ENV}.env
    networks:
      - isolation-network

  service2-nodejs:
    build:
    context: ./service2/
    dockerfile: .docker/node.dockerfile
    ports:
      - "10010:9000" 
      - "10011:5858" 
    env_file: ./service2/.docker/env/app.${APP_ENV}.env
    networks:
      - isolation-network

service1request module を使用してservice 2へのPOST要求を作成します。

request({ url: "http://service2:10010/api/",
                method: "POST",
                headers: { "Content-Type": "application/json" },
                json: true,
                body: { ... },
                time: true
            }, function (err, res, body) {
                if (!err && res.statusCode == 200) {
                    // success
                }

                // failed
            });

この呼び出しの結果は次のとおりです。

{エラー:ECONNREFUSED 172.18.0.3:10010を接続}

Postmanを使用して、service2http://localhost:10010/api/でテストし、実際に到達して期待どおりに動作することを確認できます。

何かが足りないのですが、わかりません。ここで何が問題になっていますか?

21
Gavello

ドキュメントを参照 。ポート10010はホストポートですが、コンテナポートではありません。 service2コンテナに直接アクセスする場合は、9000を使用する必要があります。

したがって、"http://service2:10010/api/""http://service2:9000/api/"に変更するだけで機能します。

23
Philip Tzou