docker で firebase emulator を起動する


Dockerfile

node と java が必要。

FROM node:lts-alpine

RUN apk add --no-cache openjdk11-jre-headless

docker-compose.yml

  • command で import, export のオプションを付けないとデータが残らないので注意
  • ports は UI, firestore, auth を使う例
  • volumes で firebase login の認証情報や emulator の jar が cache されるようにする
version: "3.7"

services:
  firebase:
    build: .
    command: npx firebase emulators:start --export-on-exit .firebase --import .firebase
    ports:
      - "4000:4000"
      - "8080:8080"
      - "9099:9099"
    volumes:
      - .:/workspace
      - ~/.cache/firebase:/root/.cache/firebase
      - ~/.config/configstore:/root/.config/configstore
    working_dir: /workspace

firebase-tools をインストール

docker-compose run firebase npm init -y
docker-compose run firebase npm i -D firebase-tools

firebase login と init

docker-compose run firebase npx firebase login --no-localhost
docker-compose run firebase npx firebase init

firebase.json

host を 0.0.0.0 にする。

"emulators": {
  "auth": {
    "host": "0.0.0.0",
    "port": 9099
  },
  "ui": {
    "enabled": true,
    "host": "0.0.0.0",
    "port": 4000
  },
  "firestore": {
    "host": "0.0.0.0",
    "port": 8080
  }
}

課題

firestore の emulator を立ち上げながら functions の shell を動かすみたいな込み入ったことをやろうとすると謎の挙動が起きる。

あまり複雑なことをするのは想定されていないのかもしれない。