Добрый день,
Я использую Kubernetes для запуска контейнеров на движке контейнеров Google.
Идея состоит в том, чтобы запустить два контейнера в капсуле. В одном контейнере используется изображение docker mysql, в другом — php, laravel, nginx и composer.
На местном уровне это работает. Идея заключается в том, что php может подключаться к базе данных на localhost, и это должно работать, если оба контейнера находятся в одном модуле. Однако, когда модуль запущен, мы видим следующее сообщение в журнале:
SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Разница лишь в том, что при локальном тестировании я меняю localhost на внутренний док-ip.
Спасибо и хорошего дня
В Unix программы MySQL обрабатывают имя хоста localhost специально, что, вероятно, отличается от того, что вы ожидаете по сравнению с другими сетевыми программами. Для подключения к localhost программы MySQL пытаются подключиться к локальному серверу с помощью файла сокета Unix. Это происходит, даже если --port
или же -P
опция дается для указания номера порта. Чтобы убедиться, что клиент устанавливает соединение TCP / IP с локальным сервером, используйте --host
или же -h
указать значение имени хоста 127.0.0.1
или IP-адрес или имя локального сервера. Вы также можете указать протокол соединения явно, даже для localhost, используя --protocol=TCP
вариант. Например:
shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP
--protocol
опция позволяет вам установить определенный тип соединения, даже если другие опции обычно по умолчанию используют другой протокол.
Другое решение использует Кубернетес Том абстракция для разделения пути между контейнерами. редактировать /etc/mysql/my.cnf
на изображениях и изменениях обоих контейнеров socket
расположение сервера и клиента MySQL для указания общего каталога или диска.
MySQL предварительно настроен для поддержки только именованных каналов на локальном хосте, если вы собираетесь подключиться к нему с другой логической машины, вам нужно найти следующую строку в вашем файле my.cnf …
#bind-address = 127.0.0.1
и заменить его на …
bind-address = {your network ip here}
После того, как вы включили адрес привязки, перезапустите сервер MySQL, проверьте журнал ошибок, чтобы убедиться в отсутствии исключений при привязке адреса, а затем войдите в систему как пользователь root и создайте новую учетную запись пользователя, присоединенную к тому IP-адресу, который вы затем сможете использовать для доступа MySQL с любой другой логической машины, если вы подключаетесь к ней с помощью IP-адреса, определенного вами в my.cnf.
Обратите внимание, что по умолчанию корневая учетная запись доступна только с локального хоста, поэтому вам необходимо либо создать новую учетную запись пользователя, либо изменить корневую учетную запись для поддержки удаленных подключений (небезопасно).