Php 从容器内部发送请求时发生PDO异常

Php 从容器内部发送请求时发生PDO异常,php,mysql,docker,docker-compose,Php,Mysql,Docker,Docker Compose,第一种情况: 我在一个laravel项目的终端上运行了php artisan migrate命令,它可以很好地更新项目上的mysql数据库 127.0.0.1:3306。这意味着php mysql连接很好 第二种情况: 在docker容器中运行项目时,我无法设置 将数据库设置为127.0.0.1,因为它位于匹配的docker容器中 容器本身。我听说docker有一座桥要连接 使用主机(对于Linux172.17.0.1)。所以我改变了mysql 连接设置到172.17.0.1:3306。我得到:

第一种情况:

我在一个laravel项目的终端上运行了
php artisan migrate
命令,它可以很好地更新项目上的mysql数据库
127.0.0.1:3306
。这意味着php mysql连接很好

第二种情况:

在docker容器中运行项目时,我无法设置 将数据库设置为
127.0.0.1
,因为它位于匹配的docker容器中 容器本身。我听说docker有一座桥要连接 使用主机(对于Linux
172.17.0.1
)。所以我改变了mysql 连接设置到
172.17.0.1:3306
。我得到:

PDO例外 包坏了。预期0收到1。数据包大小=69

SQLSTATE[HY000][2006]MySQL服务器已经消失

问题:


为什么它与
127.0.0.1
一起工作,而不是从容器内部工作?

容器的网络被隔离。您需要使用容器有权访问的IP。使用IP地址显示我得到以下信息:docker0:mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:d9:29:0d:56 brd ff:ff:ff:ff:ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255作用域全局docker0有效\u lft永远首选\u lft forever\n我正在使用网桥IP。如果您的数据库是绑定到127.0.0.1它在Docker内部不可访问。您需要绑定到0.0.0.0,但请注意,这会使所有可以插入您机器的IP的人都可以访问。您也可以始终在Docker内部启动数据库,然后使用该容器的IP<代码>docker compose使链接变得相当容易。容器的网络被隔离。您需要使用容器有权访问的IP。使用IP地址显示我得到以下信息:docker0:mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:d9:29:0d:56 brd ff:ff:ff:ff:ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255作用域全局docker0有效\u lft永远首选\u lft forever\n我正在使用网桥IP。如果您的数据库是绑定到127.0.0.1它在Docker内部不可访问。您需要绑定到0.0.0.0,但请注意,这会使所有可以插入您机器的IP的人都可以访问。您也可以始终在Docker内部启动数据库,然后使用该容器的IP<代码>docker compose使链接变得相当容易。