Laravel项目数据库迁移报错:MySQL地址解析失败求助
报错信息(翻译后):
Illuminate\Database\QueryException
SQLSTATE[HY000] [2002] php_network_getaddresses: 解析mysql失败:未提供节点名或服务名,或无法识别 (连接名: mysql, SQL: select * from information_schema.tables where table_schema = example_app and table_name = migrations and table_type = 'BASE TABLE')
报错位置:vendor/laravel/framework/src/Illuminate/Database/Connection.php:760
756▕ // 如果执行查询时发生异常,我们会格式化错误 757▕ // 信息,将绑定参数和SQL一起包含进去,这样对开发者来说 758▕ // 比单纯的数据库错误信息更有帮助。 759▕ catch (Exception $e) { ➜ 760▕ throw new QueryException( 761▕ $this->getName(), $query, $this->prepareBindings($bindings), $e 762▕ ); 763▕ } 764▕ }+47 个调用栈帧
48 artisan:35
Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
解决方案:
检查.env文件数据库配置
确保DB_HOST的值正确:- 若使用Docker Compose,
DB_HOST应设置为mysql服务的名称(即docker-compose.yml里services节点下的mysql服务名,通常为mysql); - 若本地直接运行artisan命令,且mysql容器已映射端口到本地,
DB_HOST设为127.0.0.1而非localhost(避免socket连接异常);
同时确认DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD与mysql容器内的配置完全匹配。
- 若使用Docker Compose,
清除Laravel配置缓存
执行命令:php artisan config:clear避免旧缓存配置导致连接逻辑异常。
验证容器网络连通性
- 确认Laravel容器(若运行在容器内)与mysql容器处于同一Docker网络;
- 可通过
docker inspect <mysql容器名>查看mysql容器的IP,临时将DB_HOST替换为该IP测试连接,排查DNS解析问题。
手动测试数据库连接
使用mysql客户端测试本地到mysql容器的连接:mysql -h <DB_HOST配置的值> -u <DB_USERNAME> -p <DB_DATABASE>若连接失败,先排查mysql容器的端口映射、防火墙规则,确保网络通路正常。
内容的提问来源于stack exchange,提问作者Abhishek singh

