docker 容器通过 127.0.0.1无法访问mysql容器问题

docker启动2个容器,mysql和PHP,使用默认网络模式

docker run -p 3306:3306 -p 33060:33060 -d mysql

docker run -p 80:80 -d myphp

PHP代码如下,发现无法连接数据库

<?php
$svr="127.0.0.1";
$usr = "123";
$pwd = "123";
$db = "123";
$conn = new mysqli($svr, $usr, $pwd, $db);
var_dump($conn);
?>

报错如下

Fatal error: Uncaught mysqli_sql_exception: Connection refused in /var/www/wordpress/mt.php:6 Stack trace: #0 /var/www/wordpress/mt.php(6): mysqli->__construct(‘127.0.0.1’, ‘123’, Object(SensitiveParameterValue), ‘123’) #1 {main} thrown in /var/www/wordpress/mt.php on line 6

在PHP容器里面使用127.0.0.1,会指向容器本身,并不会指向本机,因此访问不到本机的mysql服务,但是将IP改为本机对外接口是可以访问的,因为映射了3306端口到本机

查看容器的IP地址 docker network inspect bridge

“IPv4Address”: “172.17.0.2/16”

因此将上面127.0.0.1改成172.17.0.2就可以正常访问

既然容器间访问可以用虚拟基地,因此去掉端口映射

docker run -d mysql

PHP照样可以访问mysql,而且没有对外开放端口,因此更安全

最后一步,自己的博客就搞起来了O(∩_∩)O


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注