Wolfnsex
@Wolfnsex
Если не хочешь быть первым - не вставай в очередь!

Как заставить unix-socket MySQL (MariaDb) на работать в Docker?

Доброго времени коллеги!

Собственно, задался вопросом, можно ли как-то заставить работать оригинальный образ MySQL/MariaDb в Docker'е, используя unix-socket.

Суть проблемы заключает в том, что, насколько я понимаю, unix-socket mysql/mariadb пытаются создать от имени того пользователя, от которого запущена сама БД и при дефолтных параметрах это ей судя по всему удаётся... Но, т.к. стандартное местоположение unix-socket'а меня по разным причинам не устраивает, я переназначаю его по другому пути, например, /var/run/mysql.socket. А так как этот путь - общий для разных контейнеров и монтируется с внешнего носителя - по умолчанию, права на запись в него принадлежат пользователю root, что в принципе не является какой либо проблемой для других программ работающих в контейнере и создающих соотв. сокет от имени root'a. Но, из документации к MySQL'у мы узнаём, что запускать БД от имени root-пользователя это полный "ахтунг" и так делать категорически не рекомендуется и т.д.

Вариантов решения проблемы я гипотетически вижу несколько:
1. Собрать свой собственный образ с БД
2. Нагородить костылей поверх оригинального образа БД

Оба варианта мне не слишком нравятся. Возможно есть какие-то иные способы обойти подобные ограничения?

P.S. Я понимаю, что "запускать базу в контейнере - моветон" и то, что у Docker'а много проблем на разных системах отличных от Linux, особенно по части БД и всё остальное, но вопрос не в том, "почему так делать не надо?", вопрос именно в том, каковы наиболее короткие пути для решения данной задачи?

UPD. Как выяснилось, дело было не в правах, с правами на папку всё как раз таки было нормально (в итоге). Более того, установка флага rw при подключении папки - автоматически выставляет права 777 при её монитровании. Проблема была в том, что текущая ФС (файловая система), не поддерживала создание unix-сокетов (тестирование проводилось в ОС отличных от Linux, на разных ФС, для того, что бы покрыть максимальное кол-во потенциальных разработчиков). В конечном итоге, решение проблемы оказалось довольно банальным - не нужно было устанавливать параметр driver: local при монтировании файловой системы, по крайней мере с целью совместимости приложения с ОС отличными от Linux (который был установлен нами в виду того, что большинство из нас работает под Linux'ом [и под Linux'ом разумеется всё это отлично работает] и такой "финт" был удобной точкой входа в БД, которая в противном случае становится изолированной). Хотя, один момент во всей этой истории для меня остаётся не понятным... данный конфиг был частично скопирован с другого контейнера, в котором так же создавался unix-сокет, таким же точно образом и как-то всё это дело работало в конкретно той же ОС Windows, с той же файловой системой. В данный момент, особого значения это не имеет, но ситуация выглядит любопытно...

Благодарю коллегу Vitaly Karasik, за участие в дискуссии. В контексте изначальное некорректно заданного мной вопроса, его ответ я думаю был правильным, отмечаю его решением.
  • Вопрос задан
  • 589 просмотров
Решения вопроса 1
@vitaly_il1
DevOps Consulting
Создайте директорию /var/run/mysql writable для mysql.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы