Docker 卷装载路径

Docker volume mount path

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

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

docker volume create mydb

但是我不知道在启动带有卷的容器时必须指定什么路径。如果我这样做

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

重新启动时仍然丢失所有数据。我需要指定什么路径而不是 /db?这取决于什么?

您可以使用 bind mounts or docker volumes.

假设您选择 /<path-to-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 代码:参数是您需要的路径。

命名卷不应丢失数据,如 the docs:

中所述

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

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

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