Laravel Sail执行migrate报错SQLSTATE[HY000][2002]:无法解析mysql地址
解决Laravel Sail迁移时MySQL地址解析失败问题
核心原因
该错误是PHP容器无法解析MySQL服务主机名导致的,本质是容器网络或配置不匹配。
1. 匹配Docker Compose服务名与DB_HOST
打开项目根目录的docker-compose.yml,找到MySQL服务的名称(默认是mysql),确保.env文件中的DB_HOST值与该服务名完全一致:
# .env 正确配置示例 DB_HOST=mysql
禁止使用localhost或127.0.0.1——容器内的localhost指向自身,而非宿主机或MySQL容器。
2. 验证容器网络连通性
- 进入Sail的PHP容器:
./vendor/bin/sail shell - 在容器内尝试ping MySQL服务:
如果ping不通,检查容器归属网络:ping mysql- 查看项目专属网络:
docker network ls(通常前缀为项目名) - 确认MySQL容器所在网络:
docker inspect mysql | grep Networks
- 查看项目专属网络:
3. 重置Sail容器环境
- 彻底停止并清理容器(注意:
-v会删除数据卷,需提前备份数据库):./vendor/bin/sail down -v - 重新启动容器:
./vendor/bin/sail up -d - 检查容器状态,确保MySQL容器处于
Up状态:./vendor/bin/sail ps
4. 核对MySQL默认配置
Sail默认的MySQL环境变量如下,确保.env与之匹配:
DB_CONNECTION=mysql DB_PORT=3306 DB_USERNAME=sail DB_PASSWORD=password
若修改过docker-compose.yml中的MySQL用户名/密码,需同步更新.env。
5. 修复Docker DNS解析问题
打开Docker设置,进入网络选项,将DNS服务器改为公共DNS(如8.8.8.8或114.114.114.114),避免本地DNS解析失败。
内容的提问来源于stack exchange,提问作者anaha manaha
相关产品推荐
相关产品推荐

