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

Laravel Sail环境DB_HOST配置冲突导致站点无法访问或数据库无法迁移

Laravel Sail数据库主机配置冲突解决方案

核心原因

两种配置下功能互斥的根本原因是命令执行环境不一致:

  • Laravel Web服务运行在Sail的Docker容器内部,容器的专属网络可以直接通过服务名mysql解析到数据库容器的IP,因此DB_HOST=mysql时站点访问正常
  • 你直接在Mac本地终端执行php artisan migrate时,宿主机没有mysql域名的解析规则,会报getaddrinfo失败错误;当DB_HOST设为127.0.0.1时,宿主机可以访问Sail映射到本地的MySQL端口,迁移正常,但容器内的Web服务用127.0.0.1访问的是容器自身的回环地址,无法找到数据库服务,因此站点报错连接拒绝。

解决方法

方案1:使用Sail封装命令执行迁移(推荐)

不需要修改任何.env配置,保持DB_HOST=mysql即可,后续所有Artisan、Composer、NPM等命令都通过Sail提供的封装调用,默认在容器内部执行:

# 项目根目录下执行,未配置全局sail别名时使用
./vendor/bin/sail artisan migrate

# 配置全局sail别名后可直接使用
sail artisan migrate

该方案完全适配Sail的运行逻辑,不会和本地旧环境的残留配置产生冲突。

方案2:兼容本地终端直接执行命令

如果你需要直接在本地终端执行Artisan命令,可通过添加本地host解析实现两种场景通用同一套配置:

  1. 保持.env中DB_HOST=mysql不变
  2. 编辑Mac本地的/etc/hosts文件,添加解析规则:
127.0.0.1   mysql
  1. 执行命令刷新本地DNS缓存:
dscacheutil -flushcache

配置完成后,容器内的Web服务和本地终端执行的命令都可以正常解析到正确的数据库地址。

异常排查

如果完成上述操作后仍然异常,可检查两个配置项:

  • 检查docker-compose.yml中MySQL服务的端口映射,默认映射规则为3306:3306,如果本地旧环境残留的MySQL服务占用了3306端口,可修改映射为3307:3306,同时在.env中添加DB_PORT=3307即可
  • 检查本地PHP的MySQL扩展配置,确认没有被之前Valet、Homestead的旧配置覆盖导致连接异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 11:06:05