如何配置macOS High Sierra防火墙暴露80端口的Docker Nginx容器
解决macOS High Sierra上Nginx容器同网机器无法访问的问题
我来帮你搞定这个问题,之前我也碰到过类似的情况,咱们一步步来排查解决:
1. 先确认Docker容器的端口映射配置
这是最常见的原因——如果容器的80端口只绑定到了本机的127.0.0.1,那自然只有本机能访问。
- 用
docker ps查看容器的端口映射情况,看PORTS列是否显示0.0.0.0:80->80/tcp或者:::80->80/tcp - 如果显示的是
127.0.0.1:80->80/tcp,那需要重新启动容器,修改端口映射参数:# 停止现有容器(替换成你的容器ID或名称) docker stop your-nginx-container # 重新启动,绑定到所有网卡的80端口 docker run -d -p 0.0.0.0:80:80 nginx - 如果你用的是
docker-compose.yml,要确保ports字段是这样的:
而不是ports: - "80:80" # 等价于0.0.0.0:80:80"127.0.0.1:80:80"
2. 检查macOS防火墙的规则设置
你的nmap结果显示80端口是filtered,大概率是mac的防火墙挡住了外部请求:
- 打开「系统偏好设置」→「安全与隐私」→「防火墙」→「防火墙选项」
- 在列表里找到
Docker或者vpnkit,确保勾选了「允许传入连接」 - 如果列表里没有这两个程序,点击左下角的+号,找到
/Applications/Docker.app添加进去,再勾选允许传入连接
3. 重启Docker服务重置vpnkit转发
有时候vpnkit的端口转发会出现异常,重启Docker就能解决:
- 点击顶部菜单栏的Docker图标,选择「Restart」,等待服务重启完成后,再测试同网机器的访问
4. 验证同网机器的基础连通性
先排除网络本身的问题:
- 在其他机器上ping你的mac私有IP,比如
ping 192.168.1.100(替换成你的mac实际IP),如果ping不通,说明两台机器不在同一个子网,或者mac开启了局域网隔离(比如某些杀毒软件或系统设置) - 如果ping通但80端口访问不了,用
telnet 192.168.1.100 80或者curl http://192.168.1.100测试,看是否能建立连接
5. 临时关闭防火墙做测试(可选)
如果上面的步骤都没效果,可以临时关闭mac的防火墙,测试其他机器能不能访问:
- 在「系统偏好设置」→「安全与隐私」→「防火墙」里点击「关闭」
- 如果关闭后能访问,说明是防火墙规则的问题,再重新配置允许80端口的传入连接即可
内容的提问来源于stack exchange,提问作者edst




