主要内容

本页采用了机器翻译。点击此处可查看英文原文。

使用容器访问文件

在 Docker® 容器内运行的 MATLAB® 应用程序和微服务通过装载卷来访问数据文件,这些装载卷将容器的隔离文件系统与主机系统的目录连接起来。Docker 容器中的文件存储方式有以下两种:

  • 在主机文件夹中,使用 -v 标志和 docker run 将文件夹装载到容器中作为 Docker 卷

  • 位于容器的内部文件系统中(容器停止后数据不会保留)

文件访问方法

用例最佳做法注意
持久存储使用 -v 装载 Docker 卷停止/重启后数据仍保留
临时容器存储请使用 /tmp 或其他未装载的文件夹停止/重启后数据丢失
访问打包文件在容器镜像中使用 which 或绝对路径打包过程中包含的文件已嵌入到 CTF 中
将文件上传或下载至微服务使用 API 和已装载的卷与 -v通过 HTTP 发送和接收文件

装载文件夹以实现持久存储

Docker 容器的文件系统在设计上与宿主系统相互隔离,且容器停止运行后,其内部文件系统将不被保留。要与容器共享数据,请在执行 docker run 命令时使用 -v 选项,将主机系统中的文件夹装载到容器中。请为宿主机路径和容器路径指定绝对路径,否则文件夹将无法装载。请注意,在容器内部修改文件会覆盖主机上的文件。

请务必确保映射的目标文件夹对在容器中运行 MATLAB 代码的用户具有写入权限。容器通常允许向映射卷写入数据,但受限的 Linux 系统可能仅允许向 /tmp 等目录写入数据。

如果您将数据写入未装载的文件夹,这些数据仅在容器停止运行前有效。

从已部署的 MATLAB 代码中访问打包文件

在已部署的 MATLAB 代码中,您可以使用 which 函数访问随代码打包的文件。例如,如果您在使用 compiler.package.docker 打包之前,通过 compiler.build.standaloneApplication'AdditionalFiles' 选项包含了数据文件 mydata.mat,那么以下代码可以获取该文件的位置。

if isdeployed
    locate_externapp = which('mydata.mat');
end

有关详细信息,请参阅 在打包的应用程序中包含和访问文件

您还可以使用绝对路径访问文件,该路径指向容器内部已装载的卷。例如:​

  • 读取文件:

    data = fread(fopen('/container/path/myfile.mat', 'r'));

  • 写入文件:

    imwrite(img, '/container/path/output.png');
    save('/container/path/newdata.mat', 'var');

相对路径(即写入当前文件夹)可能无法正常工作,并可能导致权限错误,特别是当容器的当前目录未映射或没有写入权限时。​

如果文件需要持久保存或从外部访问,请使用 -v 选项装载文件夹。

将文件上传或下载到微服务

具有 HTTP 端点的微服务 MATLAB 应用程序允许客户端通过 API 请求上传或下载文件。该服务可以使用绝对路径将上传的文件保存到已装载的文件夹中,或从已装载的文件夹中读取文件以供下载。此工作流允许文件保存在容器外部,并在重启后继续保留。

另请参阅

主题