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

Laravel Telescope通过Docker网桥连接MySQL失败的域名解析问题

解决Docker网桥环境下Laravel Telescope MySQL域名解析失败问题

问题重现

执行Laravel命令 make:job Health/ProxmoxHeartBeatJob 时,Telescope尝试写入telescope_entries表失败,抛出错误:

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for mysql failed: Temporary failure in name resolution

底层异常为PDOException,起源于Laravel数据库连接器初始化PDO时的网络地址解析失败,环境为Docker网桥网络。


排查与解决步骤

  • 验证容器网络归属
    确保Laravel容器和MySQL容器处于同一个Docker网桥网络:

    # 查看指定网桥网络下的容器列表及IP
    docker network inspect [你的网桥名称] | grep -E "Name|IPv4Address"
    

    如果两个容器不在同一网络,将Laravel容器连接到MySQL所在的网络:

    docker network connect [目标网桥名称] [laravel容器名/ID]
    
  • 检查数据库配置的HOST值
    打开Laravel项目的.env文件,确认DB_HOST设置为MySQL容器的服务名/容器名(而非localhost或127.0.0.1,容器内的localhost指向自身而非宿主机):

    # 正确示例(对应docker-compose中mysql服务名)
    DB_HOST=mysql
    DB_PORT=3306
    DB_DATABASE=your_db_name
    DB_USERNAME=your_db_user
    DB_PASSWORD=your_db_pass
    

    修改后执行配置清理:

    php artisan config:clear
    
  • 测试容器内DNS解析能力
    进入Laravel容器,测试MySQL服务名的解析:

    docker exec -it [laravel容器名/ID] nslookup mysql
    

    正常应返回MySQL容器的IP地址。如果解析失败,检查容器的DNS配置:

    docker exec -it [laravel容器名/ID] cat /etc/resolv.conf
    

    确保包含Docker内部DNS服务器127.0.0.11,若缺失则重启容器:

    docker restart [laravel容器名/ID]
    
  • 临时使用容器IP绕过DNS
    如果DNS问题暂时无法解决,可直接使用MySQL容器的IP地址作为DB_HOST:

    # 获取MySQL容器IP
    docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [mysql容器名/ID]
    

    将.env中的DB_HOST替换为该IP,清理配置后重试命令。

  • 确认Telescope数据库配置一致性
    检查config/telescope.php中的数据库配置,确保没有单独指定错误的数据库连接:

    // config/telescope.php
    'database' => [
        'connection' => env('DB_CONNECTION', 'mysql'),
        // ... 其他配置
    ],
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:15:31