В вашей настройке есть несколько вещей, которые я бы сделал по-другому, и я попытаюсь изложить это в своем ответе. Я не могу гарантировать, что это сработает, но я так настроил свои контейнеры, так что, надеюсь, это поможет.
Во-первых, я бы не стал монтировать свой диск данных с помощью жидкость
и Гид
атрибуты. Я бы монтировал с атрибутами по умолчанию, например так:
UUID=MY_UUID /home/user/my_mount_point auto umask=022, по умолчанию 0 1
(С этого момента я буду использовать /home/пользователь/my_mount_point
в качестве ссылки с того места, где установлен ваш диск.)
Во-вторых, я не понимаю вашу ссылку на объем в докер-compose.yml
. У меня было бы так:
тома:
- /home/user/my_mount_point/db-volume-folder/db-one:/var/lib/mysql
Обратите внимание, что я всегда буду использовать абсолютный путь в докер-compose.yml
.
Кроме того, права собственности должны совпадать с владельцами запущенного контейнера, поэтому папка дб-один
должен принадлежать root.
myUser@ubuntu:~/my_mount_point/db-volume-folder$
drwxr-xr-x 3 root root 4028276 26 июля 04:47 db-one
Обратите внимание, что имя папки дб-один
должно соответствовать последняя папка на левая сторона в пути монтирования тома - это папка, где права имеют значение.
Наконец, как вы уже заметили, docker-compose также поддерживает указание пользователя, от имени которого должен запускаться контейнер. Поэтому я считаю, что вы можете изменить пользователя, а затем соответственно изменить владельца.
Итак, если вы измените пользователя следующим образом:
версия: "3.7"
Сервисы:
моя_sql_db:
имя_контейнера: my_sql_db
пользователь: мой пользователь
И затем права доступа к папке соответствуют:
myUser@ubuntu:~/my_mount_point/db-volume-folder$
drwxr-xr-x 3 myUser myUser 4028276 26 июля 04:47 db-one
Я надеюсь, что некоторые из этих инструкций будут работать для вас - пожалуйста, сообщите нам, если это так.
РЕДАКТИРОВАТЬ:
Я только что протестировал контейнер MySql со следующим файлом docker-compose.yml:
версия: "3.7"
Сервисы:
моя_sql_db:
имя_контейнера: my_sql_db
пользователь: корень
изображение: mysql/mysql-сервер: последний
порты:
- "1533:3306"
среда:
MYSQL_ROOT_PASSWORD: совершенно секретно
MYSQL_USER: пользователь mysql
MYSQL_PASSWORD: пароль mysql
тома:
- /mnt/zfs/docker-data/mysql-test/db-one:/var/lib/mysql
перезапуск: всегда
это содержимое папки /mnt/zfs/докер-данные/mysql-тест
:
/mnt/zfs/docker-data/mysql-test$ ls -la
всего 7
drwxr-xr-x 3 root root 4 1 авг 22:02 .
drwxr-xr-x 22 корень корень 22 авг 1 21:47 ..
drwxr-xr-x 6 27 sudo 30 1 августа 21:59 db-one
-rw-r--r-- 1 root root 374 1 августа 21:58 docker-compose.yml
Таким образом, контейнер успешно поднимается. Похоже, что сам контейнер меняет владельца на 27:судо
(Я думаю, это значения по умолчанию).
Если я изменю пользователя в докер-compose.yml
к мой пользователь: мой пользователь
а также изменить права на папку дб-один
к мой пользователь: мой пользователь
, я получаю эту ошибку при попытке запустить контейнер:
ОШИБКА: для my_sql_db не удается запустить службу my_sql_db: невозможно найти пользователя myuser: нет соответствующих записей в файле passwd
Таким образом, проблема заключается в совпадении пользователей, а не во владении файловой системой. И если вы получите еще одну ошибку, это, вероятно, что-то другое, чем владение файловой системой — см. мою ссылку в комментариях.