Firebase Emulator on Docker
Docker上でFirebase Emulatorを動かす。備忘録。 ほぼ他所様のブログのまんま。権限の解決だけ追加でやってる。
Firebase Emulatorを動かすDockerfileの内容は以下の通り。
cli-tableの不具合によって、firebase-toolsのv9.22.0で動作しなくなっていたため、暫定対処としてgithubからcloneして、cli-tableのバージョンをバグのないバージョンに固定している。が、11/18にマージされていて解決している。
Firebase Emulator throws npm cli-table error only when importing firestore data · Issue #3909 · firebase/firebase-tools
FROM node:16-alpine
RUN apk add --no-cache openjdk11-jre-headless \
&& apk add shadow
# && apk add shadow \
# && apk add git
RUN npm i -g firebase-tools
#11/18に不具合対応がマージされてv9.23.0で解決
#cli-tableにバグがあり、暫定対応のために
#firebase-toolsのcli-tableのバージョンを固定してbuildしている
#RUN mkdir tools && cd tools \
# && git clone https://github.com/firebase/firebase-tools.git -b v9.22.0 \
# && cd firebase-tools \
# && npm install -g npm \
# && npm config set save-exact true \
# && npm install cli-table@0.3.6 \
# && npm install \
# && npm run build \
# && npm link
RUN groupmod -g 1000 node && usermod -u 1000 -g 1000 node
USER node
以下Docker Composeのファイル。
ホスト側のfirebaseのキャッシュや設定を直接読み取って起動している。
ただ、ホスト側でemulatorを起動していると、権限が異なるためPermission deniedになる。
これを回避するために、ホスト側と同じグループのユーザーをDockerfileで設定している。
version: '3'
services:
firebase:
build:
context: .
dockerfile: firebase/Dockerfile
tty: true
restart: always
command: firebase emulators:start --only auth,firestore --export-on-exit ./firebase/.firebase --import ./firebase/.firebase
ports:
- "9000:9000"
- "8080:8080"
- "9099:9099"
volumes:
- .:/workspace
- ~/.cache/firebase:/root/.cache/firebase
- ~/.config/configstore:/root/.config/configstore
working_dir: /workspace
権限周りなんもわからん