You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker默认网络中API容器无法连接Firebase Auth模拟器

Firebase模拟器容器间通信失败问题解决

问题根源

容器里的127.0.0.1是容器自身的回环地址,并非宿主机或其他容器。你给data-api设置的FIREBASE_AUTH_EMULATOR_HOST=127.0.0.1:9099,相当于让它尝试连接自己的9099端口,而非Firebase模拟器容器的端口,自然会出现连接拒绝错误。

解决方法

  • 替换环境变量地址为服务名
    在docker-compose.yml中,假设你的Firebase模拟器服务名为firebase-emulator,将data-api的环境变量修改为:

    environment:
      - FIREBASE_AUTH_EMULATOR_HOST=firebase-emulator:9099
      - FIRESTORE_EMULATOR_HOST=firebase-emulator:8080
    

    端口号对应你firebase.json里的配置即可。

  • 确认模拟器监听配置
    确保firebase.json中所有模拟器的host设为0.0.0.0,这样模拟器容器才能对外提供服务:

    {
      "emulators": {
        "auth": {
          "host": "0.0.0.0",
          "port": 9099
        },
        "firestore": {
          "host": "0.0.0.0",
          "port": 8080
        },
        "ui": {
          "host": "0.0.0.0",
          "port": 4000
        }
      }
    }
    
  • 测试网络连通性(可选)
    进入data-api容器,ping模拟器服务名确认网络可达:

    docker exec -it <你的data-api容器名> ping firebase-emulator
    

    再用nc命令测试端口是否开放:

    docker exec -it <你的data-api容器名> nc -zv firebase-emulator 9099
    

本地运行正常的原因

本地环境中127.0.0.1指向宿主机,而模拟器也运行在宿主机上,因此能正常连接。但容器属于独立的网络命名空间,必须通过服务名(docker-compose默认会为每个服务分配域名)或容器IP(不推荐,IP可能变动)实现互相访问。

内容的提问来源于stack exchange,提问作者Nate May

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 06:37:04