PHP-PDO:SQLSTATE[HY000][2002]连接被拒绝

PHP-PDO:SQLSTATE[HY000][2002]连接被拒绝,php,mysql,docker,pdo,Php,Mysql,Docker,Pdo,我在PHP数据对象中遇到了这个问题 我无法连接到我的数据库。首先是我的PHP脚本: <?php $serverName = "127.0.0.1"; $port = "3306"; $dbName = "callitTime"; $userName = "root"; $password = "superstrongPassword"; try { $db = new PDO("mysql:host=$serverName;dbname=$dbName;port=$port;"

我在PHP数据对象中遇到了这个问题

我无法连接到我的数据库。首先是我的PHP脚本:

<?php

$serverName = "127.0.0.1";
$port = "3306";
$dbName = "callitTime";
$userName = "root";
$password = "superstrongPassword";

try {
    $db = new PDO("mysql:host=$serverName;dbname=$dbName;port=$port;",
    $userName, $password);

} catch (PDOException $pdoE) {
    echo 'An Error occurred: ' . $pdoE->getMessage();
}
?>

我可以使用相同的密码和用户名通过Phpstorm连接到相同的数据库。

这似乎不是与PHP配置相关的问题

在我看来,连接被拒绝的错误
表明您无法建立从php容器到mysql容器的连接

您需要将3306端口公开给Webserver容器,以便PHP容器可以建立到数据库的连接。如果已经桥接了容器,则需要使用容器IP地址,而不是环回127.0.0.1

有关如何连接这两个容器以及如何从php连接到mysql容器的更多信息,请参见此答案:

为了缩小问题的范围,您可以尝试通过Netcat从PHP容器内建立到给定DB主机的连接

例如,您可以尝试使用以下命令建立连接:

  • 进入要从中测试连接的容器
    docker exec-it bash

  • 通过netcat打开连接的测试(如果未准备就绪,则通过f.e.apt安装)
    nc-vz 127.0.0.1:3306

  • db name
    应该是
    dbname
    ?您是否为容器集创建了用户桥接网络?是的,容器是用户桥接的@用户188737那么我不明白为什么使用host=127.0.0.1。mysql容器肯定有不同的IP地址吗?别介意我记错了@USER188737我会尝试一下!现在我感到困惑,我甚至不能执行到我的容器。。。2秒空行返回主机外壳您可以尝试使用docker attach将stdin和stdout连接到正在运行的容器:根据您对问题的评论中的答案,我肯定,通过链接问题中的答案,您可以解决您的问题。
    An Error occurred: SQLSTATE[HY000] [2002] Connection refused