Laravel项目无法连接MySQL容器:SQLSTATE[HY000][2002]地址解析失败
解决Docker部署Laravel时数据库迁移的SQLSTATE[HY000] [2002]主机解析错误
以下是针对性的排查和解决步骤:
确认容器网络连通性
- 先检查mysql容器状态:
docker-compose ps mysql,确保状态为Up - 进入php-fpm容器测试mysql主机连通性:
docker-compose exec php-fpm ping mysql,如果ping不通,说明网络隔离问题 - 检查
docker-compose.yml的网络配置,确保php-fpm和mysql服务在同一个自定义网络中,示例配置:networks: app-network: driver: bridge services: php-fpm: # 其他配置... networks: - app-network mysql: # 其他配置... networks: - app-network
- 先检查mysql容器状态:
验证Laravel配置生效
- 进入php-fpm容器查看.env文件:
docker-compose exec php-fpm cat .env,确认DB_HOST=mysql无拼写错误 - 清除Laravel配置缓存:
docker-compose exec php-fpm php artisan config:clear,避免旧配置残留
- 进入php-fpm容器查看.env文件:
确保mysql容器完全启动
- 查看mysql启动日志:
docker-compose logs mysql,确认日志中出现ready for connections,说明服务初始化完成 - 在
docker-compose.yml中给php-fpm添加启动等待逻辑,避免mysql未就绪时发起连接:php-fpm: depends_on: - mysql command: sh -c "while ! nc -z mysql 3306; do sleep 1; done; php-fpm"
- 查看mysql启动日志:
验证mysql容器配置匹配
- 检查
docker-compose.yml中mysql的环境变量,确保MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORD与Laravel的.env配置完全一致 - 在php-fpm容器中直接用mysql命令测试连接:
docker-compose exec php-fpm mysql -h mysql -u 你的数据库用户名 -p 你的数据库名,如果能成功登录,说明网络和权限无问题
- 检查
内容的提问来源于stack exchange,提问作者suredann
相关产品推荐
相关产品推荐

