Docker卷装载路径

Docker卷装载路径,docker,sqlite,docker-volume,Docker,Sqlite,Docker Volume,我正在尝试开始使用Docker卷。我有一个简单的Python Flask应用程序,它将数据存储在sqlite3数据库中。在没有卷的容器中运行应用程序是可行的,但当然,每次我重新启动容器时,所有DB数据都会丢失 我试图阅读有关如何使用卷的可用文档,并创建了一个新的命名卷: docker卷创建mydb 但是我不知道在用卷启动容器时必须指定什么路径。如果我这么做的话 docker run-p 5000:5000-v mydb:/db my app 重新启动时仍会丢失所有数据。我需要指定什么路径而不

我正在尝试开始使用Docker卷。我有一个简单的Python Flask应用程序,它将数据存储在sqlite3数据库中。在没有卷的容器中运行应用程序是可行的,但当然,每次我重新启动容器时,所有DB数据都会丢失

我试图阅读有关如何使用卷的可用文档,并创建了一个新的命名卷:

docker卷创建mydb
但是我不知道在用卷启动容器时必须指定什么路径。如果我这么做的话

docker run-p 5000:5000-v mydb:/db my app
重新启动时仍会丢失所有数据。我需要指定什么路径而不是
/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
docker run-p 5000:5000-v./data:/my app
docker run-p 5000:5000-v mydb:/my app

要找出容器中用于存储文件的路径(如果不确定),请查找代码:参数是您需要的路径。

命名卷不应丢失数据,如中所述:

卷是保存Docker容器生成和使用的数据的首选机制

您实际需要的是确保将数据库保存到命名卷将使用的正确目录中。我建议在flask应用程序中创建一个特定目录以保存sqlite3文件,然后将该目录装载到命名卷。 例如,您的sqlite3文件路径是:
/home/myflaskapp/db
,那么装载将如下所示,否则您将丢失数据,因为您没有装载要保留的正确路径:

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

啊,好的,谢谢!在您的示例中,
/data
可能是主机上的一个空目录,容器中的所有数据都会复制到该目录中?为什么不使用我先前创建的命名卷
mydb
?say卷通常比bind mounts更受欢迎。您可以同时使用这两个卷,重点是您需要使用容器中数据库的正确路径,这显然不是
/db
您是否确实将sqlite文件保存在/db下?否,位于
os.path.join(app.instance\u path,'mydb.sqlite')
.Hm。我想继续在Windows和Linux上开发。我可以指定哪种绝对路径在两种系统下都有效?我当前相对路径的问题是,使用
python setup.py develope
vs
python setup.py install
时,它的行为不同。我所说的路径是容器内的路径,与主机操作系统无关,如果需要保留数据库,则需要将其添加到特定目录