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
发表回复