Laravel Docker - SQLSTATE[HY000] [2002] php_network_getaddresses:getaddrinfo 失败:

作者:编程家 分类: laravel 时间:2025-10-11

使用Laravel Docker - SQLSTATE[HY000] [2002] php_network_getaddresses:getaddrinfo 失败:名称或服务未知

在使用Laravel框架进行开发时,我们经常会遇到各种各样的错误。其中一个常见的错误是SQLSTATE[HY000] [2002] php_network_getaddresses:getaddrinfo失败:名称或服务未知。这个错误通常是由于数据库连接配置问题引起的。本文将为您详细解释这个错误的原因,并提供解决方案。

错误原因

当我们在Laravel中使用Docker容器时,我们需要配置正确的数据库连接信息。这个错误通常是由于在Docker容器中无法解析数据库主机名或服务名称而引起的。由于容器与主机环境隔离,容器内部无法直接访问主机的网络配置信息。因此,如果我们在Docker容器中使用主机名或服务名称作为数据库主机名时,容器将无法解析该名称,从而导致这个错误的发生。

解决方案

要解决这个错误,我们需要将数据库主机名配置为Docker容器的IP地址。为了方便起见,我们可以使用Docker Compose来管理我们的Docker容器。下面是一个示例的Docker Compose文件,演示了如何正确配置数据库连接信息:

yaml

version: '3'

services:

web:

image: laravel

ports:

- "80:80"

volumes:

- .:/var/www/html

depends_on:

- db

db:

image: mysql

environment:

MYSQL_DATABASE: laravel

MYSQL_USER: root

MYSQL_PASSWORD: secret

MYSQL_ROOT_PASSWORD: root

在这个示例中,我们定义了两个服务:web和db。web服务是我们的Laravel应用程序容器,而db服务是我们的MySQL数据库容器。注意,在db服务中,我们没有指定任何主机名或服务名称作为数据库主机名,而是使用了默认的IP地址。

在Laravel的配置文件(通常是`.env`文件)中,我们需要将数据库主机名配置为db服务的名称,如下所示:

dotenv

DB_CONNECTION=mysql

DB_HOST=db

DB_PORT=3306

DB_DATABASE=laravel

DB_USERNAME=root

DB_PASSWORD=secret

通过将数据库主机名配置为db服务的名称,Docker容器将能够正确解析数据库连接信息,从而避免了这个错误的发生。

在使用Laravel框架和Docker容器时,如果遇到SQLSTATE[HY000] [2002] php_network_getaddresses:getaddrinfo失败:名称或服务未知的错误,那么很可能是由于数据库连接配置问题引起的。为了解决这个错误,我们需要将数据库主机名配置为Docker容器的IP地址,而不是使用主机名或服务名称。

通过正确配置数据库连接信息,我们可以确保Laravel应用程序能够正常连接到数据库,并且避免了这个常见的错误的发生。希望本文对您有所帮助,祝您在使用Laravel和Docker进行开发时顺利前行!