Бакет как Volume
Монтированный бакет Yandex Cloud ObjectStorage можно использовать как Volume Docker контейнера. Бакет указывается как обычная директория в Docker compose:
volumes:
- ./<монтированная директория бакета>/:/app/<директория в docker контейнере>Для доступа к файлам бакета из контейнера необходимо в конфигурации
демона, монтирующего бакет задать режим кэширования файлов writes для доступа к имеющимся в бакете файлам:
--vfs-cache-mode writes- In this mode all reads and writes are buffered to and from disk. When data is read from the remote this is buffered to disk as well.
А также разрешить доступ root пользователю к монтированной директории.
--allow-root- Необходимо для обхода ошибки запуска Docker контейнера с монтированным бакетом в качестве volume.
Порядок запуска
Запущенный Docker контейнер может не иметь доступа к файлам бакета, если бакет был смонтирован после запуска контейнера.
Для решения этой проблемы необходимо настроить корректный порядок запуска:
- Монтирование бакета.
- Запуск Docker контейнера.
Т.к. монтирование бакета выполняется с помощью демона пользователя, в конфигурации демона можно задать шаги для остановки docker-service и его запуска уже после монтирования директории.
В секцию [Service] демона добавьте команды для остановки docker-service перед запуском rclone и его запуска после завершения:
[Service]
ExecStartPre=-/usr/bin/sudo /bin/systemctl stop docker
ExecStartPost=/usr/bin/sudo /bin/systemctl start dockerExecStartPreостановитdockerперед запускомrclone.ExecStartPostзапуститdockerпосле успешного стартаrclone.
Обновите конфигурацию демонов пользователя:
systemctl --user daemon-reloadРазрешите пользователю управлять docker через sudo без пароля:
- Откройте файл sudoers:
sudo visudo- Добавьте строку:
<user_name> ALL=(ALL) NOPASSWD: /bin/systemctl stop docker, /bin/systemctl start docker- Перезапустите
rclone<%i>.service:
systemctl --user restart rclone@<%i>.serviceПоследнее изменение: 21.09.2024 20:15