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
相关产品推荐
相关产品推荐

