Docker卷安装路径

时间:2019-03-17 19:03:39

标签: docker sqlite docker-volume

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

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

SODIUM_INSTALL=system python3 -m pip install pynacl

但是在启动带有卷的容器时,我没有得到必须指定的路径。如果我愿意

VideoView videoView = findViewById(R.id.your_video_view_id);
    videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            Intent intent = new Intent(getContext(),YourTragetActivity.class);
            startActivity(intent);
        }
    });

它在重新启动时仍会丢失所有数据。我需要指定什么路径而不是docker volume create mydb ?这取决于什么?

2 个答案:

答案 0 :(得分:1)

您可以使用bind mountsdocker volumes

假设您选择/db作为容器内数据库的位置,并且./data是您要用于持久存储数据库的主机文件系统上的文件夹,或{{1} }是您使用的音量:

mydb

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

答案 1 :(得分:1)

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

卷是持久化由Docker容器生成和使用的数据的首选机制。

您真正需要的是确保将数据库保存到命名卷将使用的正确目录中。我建议在flask应用程序中创建一个特定目录,以保存sqlite3文件,然后将该目录装入您的命名卷。 因此,例如,您的sqlite3文件路径为:from azure.storage.blob import BlockBlobService from io import BytesIO from shutil import copyfileobj with BytesIO() as input_blob: with BytesIO() as output_blob: block_blob_service = BlockBlobService(account_name='my_account_name', account_key='my_account_key') # Download as a stream block_blob_service.get_blob_to_stream('mycontainer', 'myinputfilename', input_blob) # Here is where I want to chunk up the container contents into batches of 20k # Then I want to write the above to a set of new containers using, I think, something like this... block_blob_service.create_blob_from_stream('mycontainer', 'myoutputfilename', output_blob) ,则挂载将如下所示,否则将丢失数据,因为尚未挂载要保留的正确路径:

/home/myflaskapp/db