Подключение контейнера Docker с PHP к серверу MSQL хоста (ubuntu на VirtualBox)

Запуск VirtualBox с Ubuntu 16.04, на котором у меня есть контейнер Docker с установленными Apache2 и PHP.

MYSQL установлен на хосте (ubuntu на VirtualBox).

Я пытаюсь получить доступ к серверу MYSQL на хосте из док-контейнера.

<?php
$host = '192.168.136.101';
$user = 'root';
$pass = '****';
$db = 'test';
$port = '3306';

$con = mysqli_connect($host,$user,$pass,$db,$port);

// Check connection
if (mysqli_connect_errno())
{
 echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

?>

Я получаю уведомление об отказе в соединении.

при запуске контейнера я пробовал

docker run -ti -p 80:80 -p 3306:3306 IMAGE 

Что не работает, поскольку порт 3306 используется сервером MYSQL на хосте, и если я останавливаю сервер MYSQL на хосте, выполняется команда запуска докера, однако я не могу запустить службу MYSQL на хосте.

я тоже пробовал

docker run -ti -p 80:80 --add-host=database:192.168.136.101 IMAGE

и соответственно изменил адрес привязки в /etc/mysql/mysql.conf.d/mysqld.cnf

все еще не повезло

Спасибо


person succeed    schedule 02.12.2016    source источник
comment
Сообщение ниже может помочь. Заголовок stackoverflow.com/questions/24319662/   -  person Yuva    schedule 02.12.2016


Ответы (1)


Вам нужно будет использовать хост-сеть при запуске вашего контейнера:

docker run -ti -p 80:80 --net="host" IMAGE 

Затем вы можете сослаться на свою базу данных с помощью localhost :

<?php
$host = '127.0.0.1';
$user = 'root';
$pass = '****';
$db = 'test';
$port = '3306';

Вы также можете использовать параметр --net="bridge", который используется по умолчанию вместо "host", но в этом случае вам нужно узнать IP-адрес вашего хоста и настроить Mysql для прослушивания IP-адреса контейнера в файле my. .cnf:

bind-address = x.y.z.u

где x.y.z.u — IP-адрес вашего контейнера.

person HakRo    schedule 02.12.2016
comment
при привязке IP-адреса контейнера к адресу привязки my.cnf сервер MYSQL не начинает выдавать уведомление об ошибке «Задание для mysql.service не удалось, поскольку процесс управления завершился с кодом ошибки. Подробнее см. Статус systemctl mysql.service и journalctl -xe. - person succeed; 02.12.2016
comment
Жаль, работает! С хоста введите sudo ip addr show docker0 - person succeed; 02.12.2016
comment
Принимая во внимание, что раньше я использовал IP-адрес, полученный из ifconfig при запуске из контейнера - person succeed; 02.12.2016