概要
Mac環境で動いているデバッグ環境を、Windows環境で実行した際に、Google Cloud関連のエミュレーター(Cloud Pub/Sub、Cloud Tasks)でいくつかの問題に直面しました。
本記事では、Windows11とWSL環境でGoogle Cloud 関連のエミュレーターを動作させるまでを紹介します。
環境構成
- Windows11
- WSL(Ubuntu)
- Docker(Ubuntuのパッケージ管理でインストール)
- アプリケーション(Fastify)
- エミュレーター(Docker上の、Cloud Pub/Sub、Cloud Tasks)
課題
- Cloud Pub/Subなどから呼び出されるべきエンドポイントが、正しく呼び出されない
- エミュレーターのログにはエンドポイントのURLが見当たらない旨のメッセージが出ている(エミュレーターまではメッセージが届いている)
対策
① docker-compose.override.yaml の追加
host.docker.internal
の設定をするために、docker-compose.override.yaml
ファイルを作成し、以下のように extra_hosts
の設定をします。
services: your-service: extra_hosts: - "host.docker.internal:172.18.92.229"
上記の IP は、Ubuntu上の
eth0
インターフェースのものを指定します。再起動などのタイミングでIPが変わることがあるので、その際は書き換えています。注意点:Linux 用の設定で調べていると、以下の設定もありますが、これだと別のIPが設定されてしまいます。
- "host.docker.internal:host-gateway"
- ファイルの管理:このファイルは環境に依存していて、ほとんどの開発者には不要な設定なので、
.git/info/exclude
ファイルに定義して、リポジトリに入らないようにします。
② Fastify のホスト設定
Fastifyアプリケーションのホスト設定を変更することで、Docker内のコンテナから正しくアクセスできるようにします。
- 設定内容:デフォルトのホストはlocalhostですが、これではDockerコンテナ内からアクセスできないため、以下のように
0.0.0.0
に変更します。
fastify.listen({ host: '0.0.0.0', port: 3000 })
- 注意点:Windows上のブラウザからは、WSL上のアプリケーションに localhost でアクセスできていたため、ここが設定の誤りに気づきにくかったです。 (おそらくWSLが規定でローカルホストフォワーディングを有効にしているためかと思います)
まとめ
今回のように、Windows 11でWSL(Ubuntu)とDockerを使用してGoogle Cloud Pub/SubやFirebaseエミュレーターをセットアップしデバッグ環境を構築するケースは、比較的特殊なものかもしれません。
MacやLinux環境ではより簡単に設定できる部分が、Windows環境特有の問題で原因が分かりにくくなったと思います。
また、WindowsネイティブのDockerではなく、WSL上でDockerを使用したことも問題を複雑にしたかもしれません。
WindowsネイティブのDockerではどういう設定になるのか、(そもそも考慮する点が無いのか)今後試してみたいと思います。