将运行PHP的Docker容器连接到主机(在VirtualBox上的ubuntu)MSQL服务器

在Ubuntu 16.04上运行VirtualBox,其中有一个安装了Apache2和PHP的Docker容器。

MYSQL安装在主机上(在VirtualBox上的Ubuntu上)。

我正在尝试从Docker容器访问主机上的MYSQL服务器

<?php $host = '192.168.136.101'; $user = 'root'; $pass = '****'; $db = 'test'; $port = '3306'; $con = mysqli_connect($host,$user,$pass,$db,$port); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } 

?>

我得到一个拒绝通知连接。

当启动容器时,我试过了

 docker run -ti -p 80:80 -p 3306:3306 IMAGE 

哪个不起作用,因为主机上的MYSQL服务器正在使用端口3306,如果我在主机上停止MYSQL服务器,执行docker run命令,但是我无法在主机上启动MYSQL服务

我也试过了

 docker run -ti -p 80:80 --add-host=database:192.168.136.101 IMAGE 

并相应地更改/etc/mysql/mysql.conf.d/mysqld.cnf中的绑定地址

仍然没有运气

谢谢

运行容器时需要使用主机networking:

 docker run -ti -p 80:80 --net="host" IMAGE 

然后,你可以用localhost引用你的数据库:

 <?php $host = '127.0.0.1'; $user = 'root'; $pass = '****'; $db = 'test'; $port = '3306'; 

你也可以使用–net =“bridge”选项,它是默认的,而不是“主机”,但是在这种情况下你需要找出你的主机的IP,并configurationMysql来听取容器的ip在文件中.cnf:

 bind-address = xyzu 

xyzu是你的容器的IP。