我正试图将我的firebase模拟器数据容器化:
Dockerfile.emulator
FROM node:alpine
RUN apk add --no-cache \
openjdk11-jre-headless \
nodejs \
npm \
&& npm install -g firebase-tools
WORKDIR /app
COPY ./firebase.json firebase.json
# ... I copy other config files too, clipped for brevity
COPY ./emulator-data emulator-data
CMD [ "firebase", "--project=my-project", "emulators:start", "--only", "firestore,auth,storage", "--import", "emulator-data" ]
EXPOSE 4000
EXPOSE 8080
EXPOSE 9099
# I exposed all emulator ports, clipped for brevity
我还补充道
host
对于每个进程
emulators
部分从我
firebase.json
.
"emulators": {
"singleProjectMode": false,
"auth": {
"port": 9099,
"host": "0.0.0.0"
},
"firestore": {
"port": 8080,
"host": "0.0.0.0"
},
"ui": {
"enabled": true,
"host": "0.0.0.0",
"port": 4000
}
},
执行我的撰写文件后,此操作成功运行
docker-compose.yml
(相关章节)
version: '3.8'
services:
emulator:
container_name: emulator
image: firestore
build:
context: .
dockerfile: ./dockerfiles/Dockerfile.emulator
ports:
- 4000:4000
- 8080:8080
- 9099:9099
# clipped for brevity, I exposed all emulator ports
data-api:
container_name: data-api
build:
context: .
dockerfile: ./apps/data-api/Dockerfile
ports:
- 3334:3334
depends_on:
- emulator
env_file:
- .env
restart: always
一旦跑步
-
我可以在本地浏览器上访问模拟器UI
-
身份验证仿真器在端口9099上显示“ON”
-
进口
emulator-data
可用。
-
我能够登录并从本地服务的角应用程序接收firebase令牌(网络选项卡显示“127.0.0.1:9099”)
然而,我的API应用程序(在docker容器中运行)需要验证令牌,并且在连接到auth模拟器时遇到问题。
发出请求时出错:连接ECONNREFUSED 127.0.0.1:9099。错误代码:ECONNREFUSED
我还确认了我设置了以下环境变量(我还尝试了0.0.0.0)
-
process.env[‘火灾应急主机’]=‘127.0.0.1:8080’
-
process.env['FIREBASE_AUTH_EULATOR_HOST']='127.0.0.1:9099'
当我在本地运行模拟器和API应用程序时,这种配置也会起作用,所以我认为它与容器有关,而与API应用程序中的连接信息无关。
我的
data-api
容器无法与通信
emulator
容器,即使我的本地运行的前端可以?我是否配置了错误的端口?这两个应用程序不是都在同一个默认网络上吗?