在过去的几天里,我失去了使用 docker 监听端口 80 的能力,并且不使用 sudo 就无法使用 nodejs 监听端口 80。
以前,我可以简单地在端口 80 上启动完全相同的 docker 容器,它就会绑定到端口 80。现在,它运行时没有错误,但实际上并没有监听端口。
sudo lsof -i -P | grep -i "80"
没有显示。
我以前也可以使用 node.js 监听 80 端口,无需 sudo。现在,它给出了错误:
听 EACCES:权限被拒绝 0.0.0.0:80。
如果我执行 sudo node myapp 那么它就会像往常一样监听。
我唯一能想到的就是一些自动的 Mac 更新或几天前安装的 VirtualBox 的事实。
我该如何调试正在发生的事情?我尝试重新启动。没有区别。多年来,我一直在使用 docker 和 node.js 绑定端口 80,但它却随机停止工作。
答案1
在某些操作系统中,非特权用户被禁止绑定低于一定数量的端口,以帮助防止某些类型的攻击。
我相信在 Mac 上这种行为多年来已经发生了变化,所以也许它再次发生了变化,比如由于您猜测的更新。
一个简单的解决方案是将其绑定到更高的端口号,然后在操作系统防火墙中设置从 80 到更高端口的转发端口。