Node.js 使用Docker Compose运行Google Firestore Emulator

Node.js 使用Docker Compose运行Google Firestore Emulator,node.js,firebase,docker,google-cloud-platform,google-cloud-firestore,Node.js,Firebase,Docker,Google Cloud Platform,Google Cloud Firestore,我正试图在开发环境中本地运行我的节点项目和Firestore Emulator,使用docker compose 我的节点项目有一个Dockerfile,如下所示: WORKDIR /app ADD package*.json ./ RUN npm install ADD bin ./bin CMD [ "npm", "run", "dev" ] FROM node:alpine RUN apk add openjdk11

我正试图在开发环境中本地运行我的节点项目和Firestore Emulator,使用
docker compose

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


WORKDIR /app

ADD package*.json ./

RUN npm install

ADD bin ./bin

CMD [ "npm", "run", "dev" ]
FROM node:alpine

RUN apk add openjdk11

RUN npm install -g firebase-tools

WORKDIR /app

CMD [ "firebase", "--project=xrechnung-app", "emulators:start", "--only", "firestore" ]
{
    "emulators": {
        "firestore": {
            "port": 8080,
            "host": "0.0.0.0"
        }
    }
}
然后我有一个单独的Dockerfile,名为
Dockerfile.firestore
,用于将firestore模拟器容器化。此Dockerfile如下所示:


WORKDIR /app

ADD package*.json ./

RUN npm install

ADD bin ./bin

CMD [ "npm", "run", "dev" ]
FROM node:alpine

RUN apk add openjdk11

RUN npm install -g firebase-tools

WORKDIR /app

CMD [ "firebase", "--project=xrechnung-app", "emulators:start", "--only", "firestore" ]
{
    "emulators": {
        "firestore": {
            "port": 8080,
            "host": "0.0.0.0"
        }
    }
}
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/ 
我不确定最后两行,但我在谷歌云文档中发现了一个提示,这可能会阻止模拟器的多次下载

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


有人尝试过类似的事情吗?非常感谢您的帮助。

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


WORKDIR /app

ADD package*.json ./

RUN npm install

ADD bin ./bin

CMD [ "npm", "run", "dev" ]
FROM node:alpine

RUN apk add openjdk11

RUN npm install -g firebase-tools

WORKDIR /app

CMD [ "firebase", "--project=xrechnung-app", "emulators:start", "--only", "firestore" ]
{
    "emulators": {
        "firestore": {
            "port": 8080,
            "host": "0.0.0.0"
        }
    }
}

默认情况下,emulator仅针对本地主机运行。

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


WORKDIR /app

ADD package*.json ./

RUN npm install

ADD bin ./bin

CMD [ "npm", "run", "dev" ]
FROM node:alpine

RUN apk add openjdk11

RUN npm install -g firebase-tools

WORKDIR /app

CMD [ "firebase", "--project=xrechnung-app", "emulators:start", "--only", "firestore" ]
{
    "emulators": {
        "firestore": {
            "port": 8080,
            "host": "0.0.0.0"
        }
    }
}

默认情况下,emulator仅为localhost运行。

在Kubernetes上托管Firebase emulator时发现了相同的问题,此解决方案工作得非常好!谢谢在Kubernetes上托管Firebase Emulator时发现了相同的问题,此解决方案工作得非常好!谢谢