我正在尝试与docker一起运行nginx,php,mysql。
当我运行docker-compose时,一切看起来都不错,但是当我尝试通过我的索引页面中的php代码建立与mysql的连接时,我收到了这个错误。
Warning: mysqli::__construct(): (HY000/2002): No such file or directory in /code/index.php on line 8
Connection failed: No such file or directory
更改localhost时 - > 127.0.0.1,我得到另一个连接失败的声明:
Warning: mysqli::__construct(): (HY000/2002): Connection refused in /code/index.php on line 8
Connection failed: Connection refused
php代码:
<?php
$servername = "localhost";
$username = "root";
$password = "toor";
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
echo phpinfo();
?>
另外,当我查看phpinfo();
时,mysqli.default_socket
没有任何价值。
在启动docker-compose后进入mysql镜像时,我能够进入mysql shell并执行命令就好了。
感谢任何帮助!
答案 0 :(得分:1)
阅读我的回答from this other question。 Localhost并不像你认为它应该在容器内解决。
当您使用docker-compose.yml时,您可以按照docker-compose.yml中指定的服务名称引用其他服务。您的主机名不是localhost,而是web,php和mysql。因此,在您的PHP代码中,您应该使用$servername = "mysql";
而不是$servername = "localhost";