You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS下Docker Desktop中WebSocket连接失败求助(Linux环境正常)

macOS Docker Desktop 容器自定义IP暴露到宿主机的解决方案

macOS版Docker Desktop基于虚拟机运行,容器所在的自定义子网属于虚拟机内部网络,和Linux直接使用宿主机网络栈的机制不同,因此宿主机无法直接访问容器的自定义IP。以下是几种可行的解决办法:

办法一:通过hosts映射+端口转发实现指定IP访问

  • 步骤1:获取Docker虚拟机的IP
    在终端执行命令:
    docker run --rm alpine ip route | grep default | awk '{print $3}'
    
    得到的IP(通常为192.168.65.2)是Docker虚拟机的网关地址。
  • 步骤2:修改macOS的hosts文件
    编辑/etc/hosts文件(需sudo权限),添加一行:
    192.168.65.2 192.168.129.3
    
    这样macOS访问192.168.129.3时,会被解析到Docker虚拟机的IP。
  • 步骤3:利用已配置的端口映射
    因为你已经配置了8080:8080的端口映射,此时直接使用ws://192.168.129.3:8080即可连接WebSocket服务。

办法二:使用host网络模式(需配合本地网卡IP配置)

  • 修改docker-compose.yml,移除自定义网络配置,添加network_mode: host:
    services:
      container-php:
        build:
          context: ./container-php
        volumes:
          - ${path}:/var/www/project
        image: container-php
        container_name: container_php
        network_mode: host
    
  • 在macOS本地网卡添加目标IP:
    执行命令(替换en0为你的实际主网卡名称,可通过ifconfig查看):
    sudo ifconfig en0 alias 192.168.129.3 netmask 255.255.255.0
    
  • 确保容器内的WebSocket服务绑定到0.0.0.0:8080,此时即可通过ws://192.168.129.3:8080访问。

办法三:添加静态路由直接访问容器子网

  • 步骤1:获取Docker虚拟机的IP(同办法一的步骤1)。
  • 步骤2:在macOS添加路由规则:
    sudo route add -net 192.168.129.0/24 192.168.65.2
    
    这条命令让macOS将192.168.129.0/24子网的流量转发到Docker虚拟机,之后就能直接ping通192.168.129.3并访问WebSocket服务。
  • 注意:该路由为临时规则,重启macOS后会失效,如需持久化,可将命令添加到开机启动脚本中。

内容的提问来源于stack exchange,提问作者The50

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:30:33