Контейнер 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.


person Kamil Kiełczewski    schedule 06.10.2017    source источник


Ответы (1)


Решение

Введите следующие команды на своем хосте:

cd /home/myuser/db
sudo chown 1001:0 files

Затем снова запустите контейнер и все :)

Путь

  1. После сбоя запуска я смотрю журналы: docker logs percona и вижу, что у mysql нет прав на запись в каталог /var/lib/mysql
  2. Я запускаю контейнер без тома: docker run --name percona -e MYSQL_ROOT_PASSWORD=secret -p 6603:3306 -d percona/percona-server:latest mysql -h docker_host_ip -P 6603
  3. Я вхожу в контейнер: docker exec -it percona /bin/bash
  4. Я набираю: cd /var/lib
  5. После выполнения ls -l я вижу рядом с каталогом mysql следующую строку: drwxr-xr-x 5 mysql root 4096 Oct 6 14:39 mysql. Это означает, что владельцем является mysql, а группой является root.
  6. Я получаю UID пользователя mysql на id -u mysql (я получаю 1001)
  7. Проверяю groups mysql, что у mysql есть одна группа (root). Итак, чтобы получить корневой GID, я набираю id -g mysql (я получаю 0)
  8. Команда chown позволяет установить файл UID:GID даже для пользователей, которых не существует (!), поэтому нам не нужно создавать пользователя mysql на хосте. Итак, после запуска chown ... на хосте папка files имеет точно такого же пользователя и группу, которые ожидают mysql внутри контейнера.
person Kamil Kiełczewski    schedule 06.10.2017