Я считаю, что правильный способ сделать это — смонтировать внешний диск в вашей хост-системе, а затем сопоставить том с контейнером при запуске.
Я приведу базовый пример с Контейнер NextCloud.
Так что монтируйте свой внешний диск как обычно в вашей хост-системе — скажем, вы монтируете его на /mnt/мои данные
.
Затем вы хотите создать каталог для данных NextCloud:
$ mkdir /mnt/мои-данные/nc-данные
Затем при запуске образа контейнера NextCloud предоставьте информацию для сопоставления тома с внутренним каталогом данных NextCloud:
$ докер запустить -d \
-v /mnt/мои-данные/nc-данные:/var/www/html \
Nextcloud
Если вам нужна внешняя база данных, сделайте то же самое для MariaDB:
$ mkdir /mnt/мои-данные/nc-mariadb
$ докер запустить -d \
-v /mnt/мои-данные/nc-mariadb:/var/lib/mysql \
мариадб
Убедитесь, что владелец и разрешения для каталогов данных совпадают с разрешениями для запущенного контейнера.
Я считаю, что это проще всего использовать docker-compose
для создания полного установочного файла всего стека контейнеров. Используя приведенный выше пример и docker-compose
файл, показанный на Docker Hub, это будет результат:
версия: '2'
Сервисы:
дБ:
изображение: mariadb
перезапуск: всегда
команда: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
тома:
- /mnt/мои-данные/nc-mariadb:/var/lib/mysql
среда:
- MYSQL_ROOT_PASSWORD =
- MYSQL_ПАРОЛЬ =
- MYSQL_DATABASE = следующее облако
- MYSQL_USER=следующее облако
приложение:
изображение: Nextcloud
перезапуск: всегда
порты:
- 8080:80
ссылки:
- дб
тома:
- /mnt/мои-данные/nc-данные:/var/www/html
среда:
- MYSQL_ПАРОЛЬ =
- MYSQL_DATABASE = следующее облако
- MYSQL_USER=следующее облако
- MYSQL_HOST=дБ
Обратите внимание, что раздел «тома» отсутствует, так как мы отображаем абсолютный путь в вашей хост-системе (/mnt/мои-данные/NC-xxxx
), а не именованный том.