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

Docker环境下Laravel 5执行php artisan migrate报错求助

问题诊断与解决方案

这个错误SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed的核心原因是:Laravel容器无法解析MySQL容器的网络地址,本质是数据库连接的DB_HOST配置不符合Docker Compose的容器间通信规则。

关键配置检查与修正

1. 匹配Docker Compose服务名

Docker Compose会为同一配置文件内的服务创建共享网络,服务名就是容器间可直接访问的DNS别名。你需要:

  • 打开docker-compose.yml,找到MySQL服务的名称(比如services下的mysql:,服务名即为mysql)
  • 绝对不能用localhost或127.0.0.1作为数据库主机——Laravel容器内的localhost指向容器自身,而非MySQL容器。

2. 修正.env文件配置

调整.env中的数据库主机参数,替换为Docker Compose里的MySQL服务名:

# 错误示例(无法解析)
DB_HOST=localhost
DB_HOST=127.0.0.1

# 正确示例(与docker-compose.yml中MySQL服务名一致)
DB_HOST=mysql

3. 兜底config/database.php配置

确保config/database.php中的MySQL配置项,优先读取环境变量且默认值设为Docker服务名,避免.env未生效时出错:

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', 'mysql'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'your-db-name'),
    'username' => env('DB_USERNAME', 'root'),
    'password' => env('DB_PASSWORD', 'your-db-pass'),
    // ...其他配置项
],

4. 容器重启与连通性测试

  • 修改配置后,重启Laravel容器:docker-compose restart apache(替换为你的Apache服务名)
  • 进入Laravel容器测试网络:docker exec -it [laravel容器名] ping mysql,能ping通则说明网络配置正常。

额外验证点

  • 用docker-compose ps确认MySQL容器处于正常运行状态
  • 确保.env中的DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD与docker-compose.yml中MySQL服务的环境变量完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:40:38