无法使用php从主机登录到docker mysql

dzjeubhm  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(358)

我希望在主机上运行php代码,连接到mysql(使用docker进行容器化)数据库。但我得到以下错误:
连接失败:mysql服务器已离开
在主机(ubuntu 18.04 lts)上,我安装了以下软件:
php 7.2.10(非docker)
mysql 8.0.13(docker)
apache 2.5.29(非docker)
我正在主机上的程序中使用以下连接字符串:

<?php
 $connection=mysqli_connect('127.0.0.1','vernemq','xyzw','some_db');
 if (!$connection) {
 die("Connection failed: " . mysqli_connect_error());
}
?>

注意:上面的程序是在php文件中编写的,该文件位于/var/www/html目录下
为了理解,假设主机的ip地址是172.10.10.15。
当在与主机相同的网络上的不同计算机(ip地址:172.10.10.16)上使用lampp服务器运行相同的程序时,我能够连接到mysql服务器。我正在不同的机器上运行以下修改后的程序:

<?php
 $connection=mysqli_connect('172.10.10.15','vernemq','xyzw','some_db');
 if (!$connection) {
 die("Connection failed: " . mysqli_connect_error());
}
?>

我甚至可以通过在主机的命令提示符下运行以下命令来连接到主机上的Docked mysql服务器:

$mysql -h 127.0.0.1 -u vernemq -p

从mysql提示符运行以下命令将返回以下结果:

mysql> SELECT user, host FROM mysql.user
    -> ;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| vernemq          | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
| vernemq          | localhost |
+------------------+-----------+

有什么问题吗?
更新04/01/2019我注意到以下事情
当我从命令行运行db连接文件时,出现以下错误。

Getting following error when running the php file from the command prompt
PHP Warning:  mysqli_connect(): Unexpected server respose while doing caching_sha2 auth: 109 in /var/www/html/db.php on line 2
PHP Warning:  mysqli_connect(): MySQL server has gone away in /var/www/html/db.php on line 2
PHP Warning:  mysqli_connect(): (HY000/2006): MySQL server has gone away in /var/www/html/db.php on line 2
Connection failed: MySQL server has gone away

为此,我使用以下命令将用户身份验证方法从mysql\u native更改为caching\u sha2

ALTER USER 'vernemq' IDENTIFIED WITH caching_sha2_password BY 'vernemq';

它开始起作用了。
但我不想使用缓存\u sha2身份验证,因为它破坏了另一个使用本机\u mysql身份验证方法的程序。出路是什么?

5vf7fwbs

5vf7fwbs1#

可能您运行的是mac os,docker for mac不提供 docker0 接口,因此需要创建网络别名: sudo sudo ifconfig lo0 alias 10.10.0.10/24 之后尝试使用连接字符串 10.10.0.10:3306 ,应该有用。

相关问题