描述
我有一台Windows 台式机和一台MacBook,都连接到同一个本地网络。
- 桌面(Windows):通过以太网连接
- MacBook:通过 Wi-Fi 连接
在我的桌面 (Windows)上,我使用Docker设置了一个本地 Web 服务器(在端口 上运行9000
,绑定到0.0.0.0
)。
容器以 启动-p 9000:9000
,因此应该可以从同一网络上的其他设备访问它。
使用桌面浏览器时,我可以毫无问题地访问其 Web 界面。
但是,当我尝试使用 Google Chrome从 MacBook 访问 Web 界面时,出现“页面未找到”错误。
奇怪的是,如果我使用 运行 Chrome sudo
,页面可以正确加载。
更多详细信息
- 台式机(Windows)和 MacBook 位于同一子网。
- Web 服务器正在监听0.0.0.0:9000,因此应该可以从其他设备访问它。
- 在MacBook上运行
nc -zv <desktop-ip> 9000
显示端口已打开。 - 使用 的 Python 脚本
requests.get("http://<desktop-ip>:9000")
在正常运行时会失败,但使用 执行时可以正常工作sudo
。 - 我的 MacBook 只有一个用户帐户,并且具有管理员权限。
- macOS 防火墙已被禁用(
/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
确认这一点)。 - 运行
sudo pfctl -d
(禁用pf
防火墙)不能解决问题。
我已经知道的
- 运行任何
sudo
允许访问的东西,所以我确实有一个解决方法。 - 然而,我真的很好奇这个问题的根本原因。
- 当我仅使用Windows 桌面时,我从未遇到过此问题。
它似乎是macOS 特有的,可能是由于其安全模型或网络行为。
我的问题
- 为什么只有在使用 Chrome 运行时 Web 服务器才会加载
sudo
? - 为什么一个简单的 Python
requests.get()
调用会失败,除非我用 运行它sudo
? - 什么可能限制 macOS 上普通用户进程的网络访问?
这对我来说不是一个关键问题,因为我有一个解决方法,但我真的很想知道为什么会发生这种情况。任何见解都将不胜感激——谢谢!