すげーアホなことで2時間ほどハマりました。忘れそうなので備忘録として残しておきます。
gcloud を使って firestore のエミュレータを以下のような docker-compose 設定で Docker コンテナ内から起動するとうまく接続できません。
version: "3.9"
services:
firestore:
platform: linux/amd64
image: gcr.io/google.com/cloudsdktool/cloud-sdk:352.0.0-emulators
ports:
- 6641:6641
command:
- gcloud
- beta
- emulators
- firestore
- start
- --host-port=localhost:6641
backend:
platform: linux/amd64
build: ./backend
depends_on:
- firestore
environment:
- FIRESTORE_EMULATOR_HOST=firestore:6641
ports:
- 6640:6640
原因は --host-port で指定しているホストが localhost だと docker-compose のデフォルトネットワークにバインドしてくれないからで、ここをサービス名である firestore にすると通るようになります。
version: "3.9"
services:
firestore:
platform: linux/amd64
image: gcr.io/google.com/cloudsdktool/cloud-sdk:352.0.0-emulators
ports:
- 6641:6641
command:
- gcloud
- beta
- emulators
- firestore
- start
- --host-port=firestore:6641
backend:
platform: linux/amd64
build: ./backend
depends_on:
- firestore
environment:
- FIRESTORE_EMULATOR_HOST=firestore:6641
ports:
- 6640:6640
HTTPサーバとかだと普通に localhost:5000 とかにバインドするから全然気にしてなかった......