web-dev-qa-db-ja.com

ECONNREFUSED nodeJSとexpress内のdockerコンテナー

Dockerコンテナーで実行されているnodejsアプリを構築しています...

これは私がコンテナを実行するために使用したコマンドです...

Sudo docker run -it --rm -p 3000:6001 --name xxx-running xxx

上記のコマンドラインを実行すると、次の出力が得られます。

    Running on Locally
    AppEnv {
      isLocal: true,
      app: {},
      services: {},
      name: 'xxx',
      port: 6001,
      bind: '0.0.0.0',
      urls: [ 'http://localhost:6001' ],
      url: 'http://localhost:6001' }
   App started on port http://localhost:6001

アプリはサードパーティのAPIを呼び出すため、リクエストモジュールが必要です。リクエストが呼び出されるたびに、次のエラーが発生しました...

{ [Error: connect ECONNREFUSED 192.155.253.83:443]
 code: 'ECONNREFUSED',
 errno: 'ECONNREFUSED',
 syscall: 'connect',
 address: '192.155.253.83',
 port: 443 }

Localhostエントリが原因である可能性がありますが、これを変更するにはどうすればよいですか?

14
Yinjun Zhang

LocalhostのDockerコンテナー内でサードパーティのAPIをホストしていますか?はいの場合、サードパーティのAPI Dockerコンテナーが同じネットワークを共有していることを確認する必要があります。 https://docs.docker.com/engine/userguide/networking/ を参照してください。コンテナー内のドッカーで実行されているため、ローカルホストで解決されると想定して、残りのエンドポイントにアクセスしようとして同じ問題が発生しました。問題を解決するのに役立つ一連の手順は次のとおりです。

  1. docker network lsを実行して、ブリッジドライバーの数を確認します。私の場合、2つと異なるコンテナを使用するコンテナがありました
  2. 複数のブリッジドライバーがある場合は、必ず同じブリッジネットワークを使用して互いに通信するコンテナーを開始してくださいdocker run -d -t --network networkname --name containername
  3. docker network inspect networknameを実行します。コンテナのリストでネットワークの詳細が表示されます。各コンテナにはIPv4Addressが関連付けられています。 localhostまたは127.0.0.1の代わりにこれらのアドレスの値を使用して通信します
8
George Trifonov