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

为何host.docker.internal无法解析主机内部IP?

故障排查:Docker容器内Laravel通过host.docker.internal连接主机MySQL失败
  • 验证容器内host.docker.internal的解析有效性
    进入Laravel容器的终端,执行以下命令检查域名解析:

    ping host.docker.internal
    nslookup host.docker.internal
    

    如果无法解析到主机的IP地址,说明Docker的内置域名解析存在问题,需要检查Docker Desktop的配置。

  • 检查Docker Desktop的网络配置项
    打开Docker Desktop偏好设置,进入Resources -> Network面板,确认Enable host.docker.internal and gateway.docker.internal选项已勾选。部分Docker版本升级后该选项可能被默认关闭,重新勾选后需重启Docker Desktop生效。

  • 测试容器到主机3306端口的连通性
    在容器内执行端口连通性测试命令,确认主机MySQL端口未被拦截:

    telnet host.docker.internal 3306
    # 或者使用nc命令(若容器内已安装)
    nc -zv host.docker.internal 3306
    

    如果连接失败,检查MacOS系统防火墙:进入「系统偏好设置」->「安全性与隐私」->「防火墙」,确认未阻止MySQL的入站连接,可临时关闭防火墙再次测试。

  • 确认MySQL用户权限配置生效
    登录主机的MySQL服务,执行以下命令验证用户权限:

    -- 查看root用户的host配置
    SELECT user, host FROM mysql.user WHERE user='root';
    -- 查看root用户的权限范围
    SHOW GRANTS FOR 'root'@'%';
    

    确保host字段为%(允许所有IP访问),且权限包含连接数据库所需的权限(如ALL PRIVILEGES或指定的读写权限),若配置有修改需执行FLUSH PRIVILEGES;刷新权限。

  • 清除Laravel配置缓存
    Laravel会缓存环境配置,修改.env后可能未立即生效,进入容器执行以下命令清除缓存:

    php artisan config:clear
    php artisan cache:clear
    

    清除缓存后重启Laravel应用或容器,再测试连接。

  • 检查Docker Compose的网络配置
    若使用自定义网络,在docker-compose.yml中添加extra_hosts配置,显式映射host.docker.internal到主机网关:

    services:
      laravel:
        # 其他配置...
        extra_hosts:
          - "host.docker.internal:host-gateway"
    

    执行docker-compose down && docker-compose up -d重启容器后测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:51:34