Невозможно войти в Docker MySQL с хост-компьютера, используя PHP - PullRequest
0 голосов
/ 26 декабря 2018

Я хочу запустить PHP-код на хост-компьютере, который устанавливает соединение с базой данных MySQL (в контейнерах с использованием Docker).Но я получаю следующую ошибку:

Ошибка подключения: сервер MySQL пропал

На хост-компьютере (Ubuntu 18.04 LTS) у меня установлено следующее программное обеспечение:

PHP 7.2.10 (без Docker)
MySQL 8.0.13 (Docker)
Apache 2.5.29 (без Docker)

Я использую следующую строку подключенияв программе на хост-компьютере:

<?php
 $connection=mysqli_connect('127.0.0.1','vernemq','xyzw','some_db');
 if (!$connection) {
 die("Connection failed: " . mysqli_connect_error());
}
?>

Примечание. Вышеуказанная программа написана в файле PHP, который находится в каталоге / var / www / html

Для понимания, скажем,хост-машина имеет IP-адрес 172.10.10.15.

При запуске этой же программы с сервером LAMPP на другом компьютере (IP-адрес: 172.10.10.16) в той же сети, что и хост, я могуподключиться к серверу MySQL.Я запускаю следующую измененную программу на другом компьютере:

<?php
 $connection=mysqli_connect('172.10.10.15','vernemq','xyzw','some_db');
 if (!$connection) {
 die("Connection failed: " . mysqli_connect_error());
}
?>

Я даже могу подключиться к Dockerized MySQL серверу на хост-компьютере, выполнив следующую команду в командной строке хост-компьютера:

$mysql -h 127.0.0.1 -u vernemq -p

Выполнение следующей команды из приглашения MySQL возвращает следующее:

mysql> SELECT user, host FROM mysql.user
    -> ;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| vernemq          | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
| vernemq          | localhost |
+------------------+-----------+

Любой указатель на то, что может быть не так?

Обновление 04/01/2019 Я отметил следующие вещи

Когда я запустил файл соединения db из командной строки, я получил следующую ошибку.

Getting following error when running the php file from the command prompt
PHP Warning:  mysqli_connect(): Unexpected server respose while doing caching_sha2 auth: 109 in /var/www/html/db.php on line 2
PHP Warning:  mysqli_connect(): MySQL server has gone away in /var/www/html/db.php on line 2
PHP Warning:  mysqli_connect(): (HY000/2006): MySQL server has gone away in /var/www/html/db.php on line 2
Connection failed: MySQL server has gone away

Для этого я изменил аутентификацию пользователяметод от mysql_native до caching_sha2 с помощью следующей команды

ALTER USER 'vernemq' IDENTIFIED WITH caching_sha2_password BY 'vernemq';

И он начал работать.

Но я не хочу использовать аутентификацию caching_sha2, потому что она ломает другие программы, которые работали с методом аутентификации native_mysql.Какой выход?

1 Ответ

0 голосов
/ 27 декабря 2018

Возможно, вы работаете в Mac OS, и Docker для Mac не предоставляет интерфейс docker0, поэтому вам необходимо создать сетевой псевдоним:

sudo sudo ifconfig lo0 alias 10.10.0.10/24

Послекоторые пытаются использовать строку подключения 10.10.0.10:3306, она должна работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...