Я пытаюсь запустить nginx, php, mysql вместе с docker.
Когда я запускаю docker-compose, все выглядит нормально, но когда я пытаюсь подключиться к mysql через php-код на моей индексной странице, я получаю эту ошибку.
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
.
при входе в образ mysql после запуска docker-compose, я могу войти в оболочку mysql и выполнить команды просто отлично.
Любая помощь приветствуется!
Прочтите мой ответ из этого другого вопроса. Localhost не разрешает, как вы думаете, он должен находиться внутри контейнера.
Когда вы используете docker-compose.yml, вы можете ссылаться на другие службы по их имени службы, как указано в файле docker-compose.yml. Ваши имена хостов не являются localhost, скорее это web, php и mysql. Поэтому в вашем php-коде вам следует использовать $servername = "mysql";
вместо $servername = "localhost";