Установить базу данных MySQL вне контейнера Docker - PullRequest
0 голосов
/ 29 января 2020

Можно ли запустить контейнер docker с mysql и сохранить свою базу данных (данные) вне контейнера?

1 Ответ

1 голос
/ 29 января 2020

Да, вы можете. Вы можете использовать bind mounts при создании контейнера docker, чтобы смонтировать путь на хосте к некоторому пути внутри контейнера:

https://docs.docker.com/storage/bind-mounts/

Вы можете, например, смонтируйте ОС хоста / home // mysqldata как / var / lib / mysql внутри контейнера. Когда процесс внутри контейнера docker пытается прочитать / записать файлы в / var / lib / mysql внутри контейнера, это на самом деле будет чтение / запись данных в директории / папке / mysqldata операционной системы хоста. Например:

docker run -it --mount type=bind,source=/home/bob/mysqldata,target=/var/lib/mysql <some_image_name>

Обратите внимание, что для этого также можно использовать тома docker, хотя они работают иначе, чем привязные монтирования, поэтому убедитесь, что вы используете монтирование связывания ( type = bind).

Кроме того, я видел, по крайней мере, один сценарий, в котором использование подключения bind не будет работать для данных MySQL. В моем случае это было использование привязки для контейнера docker, который работал внутри коробки Vagrant с использованием каталога, который был общей папкой VirtualBox. В этом случае я получал некоторые ошибки уровня ядра / блока, которые мешали MySQL устанавливать определенные режимы файлов или делать низкоуровневые вызовы для некоторых файлов в каталоге данных, что в конечном итоге препятствовало запуску MySQL. Теперь я точно забыл, какую ошибку он выдает (я могу go вернуться назад и проверить), но мне пришлось переключиться на громкость, а не на привязку. Это было хорошо для моего варианта использования, но просто имейте в виду, что если вы используете монтирование bind, и MySQL не запускается из-за какого-либо вызова диска более низкого уровня.

Я должен также добавить, что это не ясно из вашего вопроса / почему / вы хотите сделать это, поэтому я не могу утверждать, что делать это будет хорошо / делать то, что вы хотите. Только один MySQL процесс должен записывать в каталог данных MySQL одновременно, и эти файлы являются двоичными файлами, поэтому попытка прочитать их с помощью чего-то отличного от MySQL кажется странной. Но если у вас есть сценарий использования, в котором вы хотите, чтобы что-то за пределами Docker считывало файлы данных MySQL, монтирование связывания могло бы делать то, что вы хотите.

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