Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 连接失败:尝试通过Docker连接到MySQL时,SQLSTATE[HY000][2002]连接被拒绝_Php_Mysql_Docker_Pdo_Docker Compose - Fatal编程技术网

Php 连接失败:尝试通过Docker连接到MySQL时,SQLSTATE[HY000][2002]连接被拒绝

Php 连接失败:尝试通过Docker连接到MySQL时,SQLSTATE[HY000][2002]连接被拒绝,php,mysql,docker,pdo,docker-compose,Php,Mysql,Docker,Pdo,Docker Compose,我遇到的问题是,当我尝试连接到docker容器中的数据库时,通过PDO不断收到错误SQLSTATE[HY000][2002]连接被拒绝。我试过上面提到的方法,也试过其他一些帖子,都说了类似的话,但都没有用。MySQL当前处于活动状态,可以接受连接。我正在运行Docker Engine19.03.12Compose1.26.2Docker Desktop2.3.0.4(46911)和Compose文件版本3.8。下面是我的docker-compose.yml: 然后是我的Dockerfile: 和

我遇到的问题是,当我尝试连接到docker容器中的数据库时,通过PDO不断收到错误
SQLSTATE[HY000][2002]连接被拒绝。我试过上面提到的方法,也试过其他一些帖子,都说了类似的话,但都没有用。MySQL当前处于活动状态,可以接受连接。我正在运行Docker Engine
19.03.12
Compose
1.26.2
Docker Desktop
2.3.0.4(46911)
和Compose文件版本
3.8
。下面是我的docker-compose.yml:

然后是我的Dockerfile:

和我的PDO连接文件:

try {
    $datasource = 'mysql:host=127.18.0.2;port=6033;dbname=quizzane';
    $username = 'quizzane';
    $password = 'QFtdFZk2wC-c4skfJ?5#TPLrXyeZVTJ99=s*GEBVR_!XQ9B?_?NE+Dwc7pL!2fzb';
    $pdo = new PDO($datasource, $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully"; 
}
catch(PDOException $e)
{
    echo "Connection failed: " . $e->getMessage();
}
非本地主机的IP是docker容器的IP。以下是MySQL在启动时显示的部分内容:

mysql8      | 2020-08-30T17:19:08.484523Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.21'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.

有很多停靠的Apache/Nginx&MySQL&PHP示例。检查他们是否有帮助。将一些代码从替换为PDO对我很有效。谢谢IP地址可能是错误的,但您可以使用Compose服务名称
数据库
作为主机名。您需要连接到普通的MySQL端口3306<代码>端口:
根本不用于容器之间的连接。更详细地描述了整个网络环境。我已经考虑到了这一点。IP地址实际上是正确的,端口也是正确的。我可以成功连接到数据库<代码>端口:用于绑定,如果我没弄错的话。我需要这个,因为我有一个常规的MySQL服务器安装和docker中的一个。它们之间存在冲突。有很多停靠的Apache/Nginx&MySQL&PHP示例。检查他们是否有帮助。将一些代码从替换为PDO对我很有效。谢谢IP地址可能是错误的,但您可以使用Compose服务名称
数据库
作为主机名。您需要连接到普通的MySQL端口3306<代码>端口:根本不用于容器之间的连接。更详细地描述了整个网络环境。我已经考虑到了这一点。IP地址实际上是正确的,端口也是正确的。我可以成功连接到数据库<代码>端口:用于绑定,如果我没弄错的话。我需要这个,因为我有一个常规的MySQL服务器安装和docker中的一个。它们相互冲突。
try {
    $datasource = 'mysql:host=127.18.0.2;port=6033;dbname=quizzane';
    $username = 'quizzane';
    $password = 'QFtdFZk2wC-c4skfJ?5#TPLrXyeZVTJ99=s*GEBVR_!XQ9B?_?NE+Dwc7pL!2fzb';
    $pdo = new PDO($datasource, $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully"; 
}
catch(PDOException $e)
{
    echo "Connection failed: " . $e->getMessage();
}
mysql8      | 2020-08-30T17:19:08.484523Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.21'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.