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

如何从Docker容器内访问Laravel Herd运行的应用?

解决Docker容器访问Mac上Laravel Herd本地域名的问题

针对你在MacOS Sequoia 15.0.1上遇到的Docker容器无法访问Herd托管的myapp1.test等本地域名的问题,以下是几个可行的解决方案:

方法1:配置容器DNS指向本地主机IP

Laravel Herd通过修改本地DNS实现.test域名的解析,让容器使用主机的DNS即可正确解析这些域名:

  1. 获取你的Mac局域网IP:打开终端执行ifconfig en0 | grep inet,输出中inet后的值即为目标IP(例如192.168.3.10)
  2. 启动Docker容器时添加--dns参数指向该IP,同时保留host.docker.internal映射:
docker run --dns=192.168.3.10 --add-host=host.docker.internal:host-gateway your-service-image

此时容器内访问http://myapp1.test/endpoint会通过主机DNS解析到正确的本地服务。

方法2:手动在容器hosts中映射.test域名

如果不想修改DNS配置,可以直接把目标域名映射到host.docker.internal(Mac上该地址指向主机):
启动容器时添加--add-host参数,每个域名对应一条:

docker run --add-host=myapp1.test:host.docker.internal --add-host=myapp2.test:host.docker.internal your-service-image

这个方法直接强制容器将.test域名解析到主机,无需依赖DNS配置。

方法3:通过主机IP+Host头访问

如果你的Herd应用绑定在主机的局域网IP上(而非仅127.0.0.1),可以在容器内通过主机IP访问,并手动指定Host头匹配虚拟主机配置:

  1. 用方法1的方式获取主机局域网IP(如192.168.3.10)
  2. 在容器内发起请求时添加Host头,以curl为例:
curl -H "Host: myapp1.test" http://192.168.3.10/endpoint

如果应用运行在自定义端口(如9090),则加上端口:

curl -H "Host: myapp1.test" http://192.168.3.10:9090/endpoint

若你的服务支持配置请求头,也可在服务代码中固定添加该Host头。

为何之前的方法失效?

  • --network=host在Mac Docker中无效:Mac的Docker运行在底层虚拟机中,host模式指向的是虚拟机的网络命名空间,而非Mac主机,因此无法直接访问主机的127.0.0.1服务。
  • --add-host=host.docker.internal:host-gateway仅解决了主机IP映射,但容器默认DNS无法解析.test域名,单独使用无法定位到Herd应用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:10:08