【问题标题】:Firebase serve error: Port 5000 is not open. Could not start functions emulatorFirebase 服务错误:端口 5000 未打开。无法启动功能模拟器
【发布时间】:2019-12-23 12:41:58
【问题描述】:

我正在尝试在本地提供 firebase 功能,但是当我运行 firebase servefirebase emulators:start 时,错误消息是:“端口 5000 未打开,无法启动功能模拟器。”

我使用的是 Windows 10,因此我尝试更改端口号,检查端口是否被防火墙阻止,并在防火墙中为端口 5000-5010 创建一个新规则,但这些方法都不适用于我.

【问题讨论】:

  • 在 MacOS 上遇到同样的问题。现在恢复到 firebase-tools 版本 6.12.0,这似乎有效(尽管不是真正解决问题的方法)。 npm i -g firebase-tools@6.12.0
  • 使用firebase-tools@6.12.0在node模块中产生grpc相关错误,最新的firebase-tools没有这个错误。 => 恢复到 v6.12.0 对我不起作用:(
  • @Thr3e 这也发生在我身上。所以,我在functions文件夹中安装了grpc模块,它又可以工作了
  • 在我的例子中,我运行了AirServer,它使用了5001 端口。所以我一看到publicmat的回答就把它关了。

标签: javascript firebase firebase-tools


【解决方案1】:

这里建议https://github.com/firebase/firebase-tools/issues/2856#issuecomment-902411134

正在升级 Node.js。

我刚刚将 Node 升级到 14.17.5。这解决了问题。我只需按 Ctrl+C 即可停止所有模拟器。

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
【解决方案2】:

MacOS Monterey 中,新的“AirPlay 接收器”可能会占用端口 5000。这可以在设置 -> 共享中禁用:

Screenshot of settings panel for disabling AirPlay Receiver

禁用 AirPlay 接收器(如果您不需要它)会释放端口 5000。

【讨论】:

  • 非常感谢!这成功了:P
  • 很好的解决方案.. 谢谢
  • 哇...这太晦涩难懂了。谢谢!
【解决方案3】:

首先,关闭所有选项卡重新启动 VS 代码,然后进入 firebase.json 文件 更改ui端口号然后重新启动,它会工作!

“ui”:{ “启用”:是的, "port": "输入任意数字" }

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
【解决方案4】:

不久前我也遇到过同样的问题。

我发现我的计算机上的另一个终端上运行了 firebase。

所以在您尝试firebase serve 之前,请检查它是否在另一个终端上运行。

我希望它能像我一样解决你的问题。

【讨论】:

    【解决方案5】:

    如果firebase serve --host 127.0.0.1为你解决;也许你还没有设置你的hosts 文件。 Linux - Network configuration

    【讨论】:

      【解决方案6】:

      运行这个命令对我有用:firebase emulators:start --only firestore

      同时关闭此窗口:

      【讨论】:

        【解决方案7】:

        对于 Windows 用户:

        netstat -ano|findstr "PID :5000"
        

        然后在行尾找到进程 ID (PID)。

        taskkill /pid FOUNDPID /F
        

        命令 taskkill 在 VS Code 上下文的终端中不起作用。它需要(提升的)CMD 提示或等效的 Powershell 环境才能成功终止对 127.0.0.1:5000 的侦听。

        【讨论】:

          【解决方案8】:

          lsof -t -i tcp:5000 | xargs kill

          Mac 用户的单行替代方案,将进程 ID 直接通过管道传输到 kill。 h/t @manav

          最初的问题是针对 Windows 的,但可能对其他人有用,因为问题现在在搜索结果中排名很高。

          【讨论】:

            【解决方案9】:

            这里的问题是您的端口号 5000 正在运行某个进程。 因此,首先,您需要终止该进程。

            在ubuntu中查找进程id

            sudo lsof -i :5000

            假设你得到 14541 的 PID

            杀死进程

            sudo kill -9 14541

            【讨论】:

              【解决方案10】:

              对于 Mac/Linux,使用终端/Shell 查找进程 ID (PID),然后终止进程。

              sudo lsof -i :5000
              sudo kill -9 PID
              

              【讨论】:

              • lsof -t -i tcp:5000 | xargs kill - 一种替代方法,将 lsof 的输出通过管道传递到 kill (h/t @manav)
              • 如果您使用的是 macOS Monterey,Airplay 服务器现在使用端口 5000,因此您需要更改进程的端口或在系统偏好设置 > 共享中终止 Airplay 接收器
              【解决方案11】:

              或者使用不同的端口,这是一个简单的解决方案。 例如, firebase serve -p 5001

              【讨论】:

                【解决方案12】:

                只需运行命令 firebase serve --only functions --host 0.0.0.0

                【讨论】:

                  【解决方案13】:

                  快速修复npm i -g firebase-tools@7.8.0

                  【讨论】:

                    【解决方案14】:

                    解决方案:Firebase 服务错误:端口 5000 未打开。无法启动函数模拟器

                    如果您在运行 Firebase 时收到以下错误消息之一,您可以通过切换到其他版本的 Firebase 工具轻松解决问题。

                    5000 端口未打开,无法启动功能模拟器。

                    如果您使用的是第 6 版 Firebase 工具,则可以切换到最新版本 (6.12.0),或者尝试使用 v7.2.2。要更改为 Firebase 工具版本,请运行以下节点包管理器命令。

                    npm install -g firebase-tools@6.12.0

                    【讨论】:

                      【解决方案15】:

                      这对我有用。

                      只需重新启动系统。

                      【讨论】:

                      • 其实重启代码编辑器也能正常工作,谢谢!
                      【解决方案16】:

                      最近在官方 github repo 中报告了一个类似的问题:https://github.com/firebase/firebase-tools/issues/1606

                      它是由依赖项(节点端口查找器)中的错误引起的,如您在此处看到的。 https://github.com/http-party/node-portfinder/pull/86

                      编辑它的快速修复可能是使用旧版本的节点端口查找器(v 1.0.21)。或者,您可以通过编辑node_modules/firebase-tools/lib/emulator/controller.js 并将yield pf.getPortPromise({ port, stopPort: port }) 更改为yield pf.getPortPromise({ port, stopPort: port + 1 }) 来实现。

                      编辑: 按照 Mladen Skrbic 的建议,要找到 firebase-tools 文件夹,您应该运行 npm root -g 并在其中找到 firebase-tools 文件夹。

                      这应该可以解决问题!

                      【讨论】:

                      • 谢谢它解决了我的问题,我只想说 npm root -g 会告诉你去哪里看
                      • OSX 上的一行修复:sed -i '' 's/stopPort: port/stopPort: port+1/' node_modules/firebase-tools/lib/emulator/controller.js
                      • 哇,我们的编码就像 1999 年一样!
                      【解决方案17】:

                      在哪里? node_modules/firebase-tools/lib/emulator/controller.js 我在 node_modules 中找不到“firebase-tools”文件夹。 我只能找到 firebase-funstions 和 firebase-admin。

                      【讨论】:

                      • 这是你全局安装的 firebase-tools 的 node_modules,可以在这里找到 C:\Users[USERNAME]\AppData\Roaming\npm\node_modules
                      【解决方案18】:

                      而不是最新的 firebase-functions(目前是 3.2.0),在我的情况下强制它保持在 3.0.2。

                      "dependencies": {
                          "firebase-admin": "^8.2.0",
                          "firebase-functions": "3.0.2",
                          ...
                      }
                      

                      (我也在使用 firebase-tools 7.0.2 版 atm,没有检查最新版本。如果不起作用,请尝试将 firebase-tools 恢复为 7.0.2)

                      【讨论】:

                      • 在 firebase-tools 版本 7.2.2 中遇到问题,但按照建议(感谢)在版本 7.0.2 以及最新版本 7.2.4 中工作。
                      • 在任何 firebase-tools 版本中,仅适用于 firebase-functions 3.0.2。
                      猜你喜欢
                      • 2019-12-30
                      • 2020-09-09
                      • 1970-01-01
                      • 2021-08-24
                      • 1970-01-01
                      • 1970-01-01
                      • 2020-11-12
                      • 1970-01-01
                      • 2021-06-22
                      相关资源
                      最近更新 更多