Docker镜像中Firebase登录异常:Localhost:9005连接被拒绝
解决Docker环境下Firebase Tools登录的localhost:9005连接拒绝问题
我之前也碰到过Docker环境下Firebase Tools登录的这个坑,给你几个排查和解决的思路:
1. 先搞定Docker端口映射
这个问题最常见的原因就是容器的端口没和宿主机打通。你运行容器的时候,一定要把容器内的9005端口映射到宿主机的对应端口,启动命令里必须加上:
-p 9005:9005
举个完整的启动例子:
docker run -it -p 9005:9005 -v $(pwd):/app your-firebase-image
这里的-p 9005:9005就是把宿主机的9005端口和容器内的9005端口做绑定,不然宿主机根本访问不到容器里的服务。
2. 修改Firebase登录的监听地址
Firebase Tools默认在容器内启动的登录服务只绑定127.0.0.1(容器自己的本地回环),宿主机肯定访问不了。你需要强制让它监听容器的所有网络接口,执行登录命令时加上--host 0.0.0.0参数:
firebase login --host 0.0.0.0
这样Firebase的登录服务就会绑定到容器的0.0.0.0地址,宿主机访问localhost:9005就能正常连接了。
3. 非交互场景的替代方案(彻底绕开浏览器登录)
如果你的场景是完全自动化的非交互环境,其实可以不用浏览器登录,直接用Firebase服务账号密钥来认证:
- 从Firebase控制台下载你的项目服务账号JSON密钥文件
- 把密钥文件挂载到Docker容器里,比如:
docker run -v /本地路径/your-service-account.json:/app/service-account.json your-firebase-image
- 在容器内用密钥完成认证:
# 方式1:直接用密钥生成登录token firebase login:ci --token "$(cat /app/service-account.json)" # 方式2:设置环境变量让Firebase自动读取密钥 export GOOGLE_APPLICATION_CREDENTIALS="/app/service-account.json"
这种方式完全不需要浏览器交互,适合CI/CD或者自动化脚本场景。
4. 验证容器内服务状态
如果前面的步骤都做了还是不行,你可以进到容器内部检查9005端口是否真的在监听:
docker exec -it 你的容器ID/名称 bash # 执行端口监听检查 netstat -tulpn | grep 9005
如果能看到0.0.0.0:9005的监听记录,说明服务已经正常启动,那问题可能出在宿主机的防火墙设置(比如宿主机防火墙挡住了9005端口)。
内容的提问来源于stack exchange,提问作者LRS
相关产品推荐
相关产品推荐

