Remote Containerで実行している環境間で通信をする場合についてのメモ。
状況としては開発中のプロジェクトAとプロジェクトBがあって、それぞれ同じマシン上でRemote Containersを使って開発をしている状況。
プロジェクトAがREST APIを提供するプロジェクトでコンテナ内でローカル開発サーバが起動していて、仮にhttp://localhost:3000/で待ち受けてるとしよう。
その状態でプロジェクトBからこのAPIをコールしたい。
まず、普通にlocalhostでアクセスするのはもちろんダメ。
ではコンテナに割り振られてるIPでのアクセスはどうかを試してみる。コンテナに割り振られてるIPアドレスはdocker inspect
で確認できる。
docker ps
で確認したいコンテナのIDを確認してdocker inspect <コンテナID>
を実行して出力結果のIPAddress
を確認すればいい。
さて、IPアドレスを確認すると
プロジェクトA: 172.17.0.1
プロジェクトB: 172.17.0.2
という感じだったのでhttp://127.17.0.1:3000/でアクセスしてみたがこれもConnection Refusedになる。
その後、あれやこれやとポートのフォワーディング周りで関係しそうな設定を探したり試したりしたところ、結果的には以下の設定を有効にすることでプロジェクトBのコンテナ内からプロジェクトAに対してアクセスができるようになった。
"remote.localPortHost": "allInterfaces",
デフォルトではここがlocalhostになっているんだがその場合全てのポートはlocalhostあてに転送するようにVSCodeが振る舞うみたい。
というわけで解決。