You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置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

火山引擎 最新活动