Контейнер Docker Percona (mysql mariadb) останавливается после запуска в Ubuntu, когда определен том (-v)
В Ubuntu 16.04 с Docker 17.05.0-ce я пытаюсь настроить образ докера percona-mysql с отображением директории хоста (тома). Вот изображение:
docker pull percona/percona-server:latest
А вот команда запуска контейнера:
docker run --name percona -e MYSQL_ROOT_PASSWORD=secret -v /home/myuser/db/files:/var/lib/mysql -p 6603:3306 -d percona/percona-server:latest mysql -h docker_host_ip -P 6603
Проблема в том, что контейнер сразу останавливается после этой команды - но когда я не использую -v ...
параметр (объем сопоставления), то контейнер запускается без проблем. Как решить эту проблему?
Эта проблема также может быть связана с изображениями mysql или mariadb.
1 ответ
Решение
Введите следующие команды на вашем хосте:
cd /home/myuser/db
sudo chown 1001:0 files
Затем снова запустите контейнер и все:)
Путь
- После неудачного запуска я смотрю логи:
docker logs percona
и видим, что у mysql нет прав на запись в dir/var/lib/mysql
- Я запускаю контейнер без объема:
docker run --name percona -e MYSQL_ROOT_PASSWORD=secret -p 6603:3306 -d percona/percona-server:latest mysql -h docker_host_ip -P 6603
- Я вхожу в контейнер:
docker exec -it percona /bin/bash
- Я печатаю:
cd /var/lib
- После выполнения
ls -l
я вижу возле mysql dir следующую строку:drwxr-xr-x 5 mysql root 4096 Oct 6 14:39 mysql
, Это означает, что владелецmysql
и группаroot
, - Я получаю UID пользователя mysql
id -u mysql
(Я получаю 1001) - Я проверяю
groups mysql
этот mysql имеет одну группу (root). Так что для получения root GID я набираюid -g mysql
(Я получаю 0) chown
Команда позволяет установить UID файла:GID даже для пользователей, которых не существует (!), поэтому нам не нужно создавать пользователяmysql
на хосте. Так что после запускаchown ...
на хосте, в папкеfiles
иметь точно такого же пользователя и группу, которые ожидают в контейнере mysql.