Php 连接失败:尝试通过Docker连接到MySQL时,SQLSTATE[HY000][2002]连接被拒绝
我遇到的问题是,当我尝试连接到docker容器中的数据库时,通过PDO不断收到错误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: 和
SQLSTATE[HY000][2002]连接被拒绝。我试过上面提到的方法,也试过其他一些帖子,都说了类似的话,但都没有用。MySQL当前处于活动状态,可以接受连接。我正在运行Docker Engine19.03.12
Compose1.26.2
Docker Desktop2.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.