使用 Docker-Compose 运行 Google Firestore 模拟器

Mor*_*ube 1 node.js firebase docker google-cloud-platform google-cloud-firestore

我正在尝试docker-compose在开发环境中本地运行我的 Node 项目以及 Firestore 模拟器。

我的 Node 项目有一个 Dockerfile,如下所示:


WORKDIR /app

ADD package*.json ./

RUN npm install

ADD bin ./bin

CMD [ "npm", "run", "dev" ]
Run Code Online (Sandbox Code Playgroud)

然后我有一个单独的 Dockerfile,Dockerfile.firestore用于容器化 Firestore 模拟器。这个 Dockerfile 看起来像这样:

FROM node:alpine

RUN apk add openjdk11

RUN npm install -g firebase-tools

WORKDIR /app

CMD [ "firebase", "--project=xrechnung-app", "emulators:start", "--only", "firestore" ]
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml 的写法如下:

version: "3"
services:
  api:
    image: api
    build:
      context: api
      dockerfile: Dockerfile.dev
    depends_on:
      - db
    environment:
      - PORT=3000
    ports:
      - 3000:3000
    volumes:
      - ./api/src:/app/src
  db:
    image: firestore
    build:
      context: api
      dockerfile: Dockerfile.firestore
    ports:
      - 4000:4000
      - 8080:8080
    volumes:
      - .cache/firebase/emulators/:/app/.cache/firebase/emulators/ 
Run Code Online (Sandbox Code Playgroud)

我不确定最后两行,但我在 Google Cloud 文档中发现了一个提示,这可能会阻止模拟器的多次下载。

当使用docker-compose upNode 项目启动容器时,运行没有问题,并且在 localhost:3000 上可用。模拟器也会旋转。控制台记录其正在运行。但是我无法在规定的端口(4000 和 8080)上使用它

有没有人已经尝试过类似的事情?我感谢您的帮助。

小智 6

您可能需要在 firebase.json 文件中设置主机,如下所示:

{
    "emulators": {
        "firestore": {
            "port": 8080,
            "host": "0.0.0.0"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,模拟器仅在本地主机上运行。

  • 如果有更多的解释,这个答案可能会更好。 (6认同)