Путь монтирования тома Docker - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь начать работу с томами Docker.У меня есть простое приложение Python Flask, которое хранит данные в базе данных sqlite3.Запуск приложения в контейнере без тома работает, но, конечно, каждый раз, когда я перезапускаю контейнер, все данные БД теряются.

Я пытался прочитать доступную документацию о том, как использовать тома, и ясоздал новый, названный том:

docker volume create mydb

Но я не понимаю, какой путь мне нужно указать при запуске контейнера с томом.Если я просто сделаю

docker run -p 5000:5000 -v mydb:/db my-app

, он все равно потеряет все данные при перезапуске.Какой путь мне нужно указать вместо /db?От чего это зависит?

Ответы [ 2 ]

1 голос
/ 17 марта 2019

Именованные тома не должны терять данные, как описано в Документах :

Тома являются предпочтительным механизмом для сохранения данных, генерируемых и используемых контейнерами Docker.

Что вам действительно нужно, так это убедиться, что вы сохраняете базу данных в правильном каталоге, который будет использовать указанный том.Я предлагаю создать конкретный каталог внутри вашего приложения фляги, чтобы сохранить файл sqlite3, а затем смонтировать этот каталог на указанный вами том.Так, например, ваш путь к файлу sqlite3: /home/myflaskapp/db, тогда монтирование будет следующим, иначе вы потеряете данные, потому что вы не смонтировали правильный путь, который хотите сохранить:

docker run -p 5000:5000 -v mydb:/home/myflaskapp/db my-app
1 голос
/ 17 марта 2019

Вы можете использовать bind mounts или docker volumes.

Предполагается, что вы выбрали /db в качестве расположения базы данных внутри контейнера, а ./data - это папка в файловой системе вашего хоста, которую вы хотите использовать для сохранения базы данных, или mydb - это том, который вы используете :

docker run -p 5000:5000 -v ./data:/<path-to-db> my-app
docker run -p 5000:5000 -v mydb:/<path-to-db> my-app

Чтобы выяснить, какой путь внутри контейнера вы используете для хранения файлов (если вы не уверены), найдите код sqlite3.connect: аргумент - это нужный вам путь.

...