localhost:5000 在 macOS v12 (蒙特雷) 中不可用

问题描述 投票:0回答:3

我无法访问 macOS v12(蒙特雷)(Flask 或任何其他)上的本地主机端口 5000 上的 Web 服务器。

例如,使用内置的 HTTP 服务器,我无法访问端口 5000:

python3 -m http.server 5000

... (stack trace)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/socketserver.py", line 466, in server_bind
self.socket.bind(self.server_address)
OSError: [Errno 48] Address already in use

如果您安装了 Flask 并且运行 Flask Web 服务器,它不会在启动时失败。让我们看一下最小的 Flask 示例代码:

# Save as hello.py in the current working directory.
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

然后运行它(前提是你安装了 Flask/Python 3):

export FLASK_APP=hello
flask run

输出:

* Running on http://127.0.0.1:5000/

但是,如果您尝试访问此服务器(通过浏览器或其他任何方式),则会被拒绝:

curl -I localhost:5000
HTTP/1.1 403 Forbidden
Content-Length: 0
Server: AirTunes/595.13.1
python localhost macos-monterey
3个回答
145
投票

macOS Monterey 引入了 AirPlay Receiver 在端口 5000 上运行。这会阻止您的 Web 服务器在端口 5000 上提供服务。Receiver 已拥有该端口

您可以:

  1. 关闭 AirPlay 接收器,或者;
  2. 在不同的端口上运行服务器(通常最好)。

关闭AirPlay接收器

转到 系统偏好设置共享取消勾选 Airplay 接收器

查看更多详情

您现在应该能够在端口 5000 上重新运行服务器并获得响应:

python3 -m http.server 5000

Serving HTTP on :: port 5000 (http://[::]:5000/) ...

在不同于 5000 的端口上运行服务器

不再使用端口 5000 可能是一个更好的主意,因为该端口是为 macOS Monterey 上的 Airplay 接收器保留的。

只是为了在不同的端口上运行服务器。无需关闭 Airplay 接收器。

python3 -m http.server 4999

export FLASK_APP=hello
flask run -p 4999

1
投票

我遇到了同样的问题,我将 mac 操作系统从 big sur 升级到 Monterey ,我有一个在端口 5000 上运行的节点 API,但现在由于 API 试图使用正在使用的端口而失败具有 Airplay 的操作功能,因此作为解决方案,我使用关闭 Air Play 功能,然后我的应用程序开始工作。


0
投票

尝试使用 Firefox 而不是 Chrome。

由于启用了 AirReceiver,我在 Chrome 中遇到了同样的错误。令人惊讶的是,在 Firefox 中,本地站点在同一端口上打开。

© www.soinside.com 2019 - 2024. All rights reserved.