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

Laravel 9 Sail项目查询正常 执行迁移报mysql域名解析错误

问题原因

该问题属于Laravel Sail环境的典型命令执行环境错误,核心逻辑如下:

  • 你.env中配置的DB_HOST=mysql是Docker Compose内网分配给MySQL容器的服务别名,该主机名仅能在Sail创建的Docker集群内部网络中被DNS解析。
  • 你直接在宿主机的本地终端执行php artisan migrate命令,命令运行在宿主机的本地PHP环境下,宿主机不存在mysql对应的主机解析记录,因此触发域名解析失败报错。
  • 应用内Eloquent增删改查正常,是因为Laravel应用本身运行在Sail的PHP应用容器内,处于Docker内网环境,可以正常解析mysql主机名连通数据库。
解决方案

按推荐优先级从高到低排列:

  • 使用Sail官方命令前缀执行迁移
    不要直接调用本地PHP执行artisan命令,在项目根目录通过Sail入口执行,命令会自动在应用容器内部运行,自动适配容器网络配置:
    ./vendor/bin/sail artisan migrate
    
    如果你已经配置了sail命令别名(官方文档推荐配置为alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'),可以直接简写执行:
    sail artisan migrate
    
  • 进入应用容器后执行迁移
    先通过docker命令进入运行中的Laravel应用容器,再在容器内执行原生artisan命令:
    # 先通过docker ps查看你的应用容器名,Sail默认命名规则为「项目目录名-laravel.test-1」
    docker exec -it 你的应用容器名 bash
    # 进入容器交互终端后再执行迁移
    php artisan migrate
    
  • 临时指定宿主机可解析的数据库地址执行(不推荐长期使用)
    如果必须在宿主机本地环境执行迁移,可以执行命令时临时覆盖DB_HOST环境变量,指向Sail映射到宿主机的数据库端口地址:
    DB_HOST=127.0.0.1 php artisan migrate
    
    注意不要永久修改.env文件中的DB_HOST为127.0.0.1,否则容器内部运行的应用将无法连接数据库。

补充:提问中写的php arisan migrate存在拼写错误(正确拼写为artisan),但该错误会触发「命令不存在」提示,和本次DNS解析报错无关,属于提问时的笔误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:54:18