0

在 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 中的绑定地址

仍然没有运气

谢谢

4

1 回答 1

1

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

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" 选项,这是默认选项,而不是 "host",但在这种情况下,您需要找出主机的 IP,并配置 Mysql 以在文件 my 中侦听容器的 ip .cnf:

bind-address = x.y.z.u

其中 xyzu 是您的容器的 IP。

于 2016-12-02T11:34:30.293 回答