代码之家  ›  专栏  ›  技术社区  ›  Nate May

API应用程序无法连接到默认网络上Docker容器内的Firebase Auth Emulator

  •  0
  • Nate May  · 技术社区  · 1 年前

    我正试图将我的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 容器,即使我的本地运行的前端可以?我是否配置了错误的端口?这两个应用程序不是都在同一个默认网络上吗?

    0 回复  |  直到 1 年前
        1
  •  0
  •   Nate May    1 年前

    为了使docker容器连接到另一个容器,需要引用容器的名称,而不是数字主机地址。在我的情况下,API容器需要引用主机 emulator (模拟器容器的名称)

    • process.env['FIRESTOR_EMULATOR_HOST']='仿真器:8080'
    • process.env['FIREBASE_AUTH_EMULATOR_HOST']='仿真器:9099'
    推荐文章