防止在更新 Iot Edge 模块时丢失文件

Prevent loosing files when updating an IotEdge module

我实现了一个将文件保存到光盘的 azure iotedge 模块。 每次我更新到我的模块的新版本时,在此之前保存的所有文件都会丢失。我怎样才能更新我的模块并仍然保留旧文件?

默认情况下,文件保存到模块的 docker 容器中。如果您更新模块,则会创建一个新的 docker 容器,并丢弃包含您的文件的旧容器。

如果要保留文件,必须将它们保存在 docker 容器之外。 为此,您必须将主机的文件夹绑定到模块的容器。

您可以通过在部署模板中设置模块的 createOptions 来做到这一点,如下所示:

"createOptions": {
    "HostConfig": {
        "Binds": [
            "/path/on/host/:/app/files/"
         ]
     }
 }

如果您将文件保存到模块中的 "./files/myfile.txt",它实际上会保存到 "/path/on/host/myfile.txt" 在托管模块 docker 容器的机器上,更新模块后它仍然存在。

在启动模块之前,您必须手动在主机上创建文件夹。 并且您必须为 moduleUser 提供 read/write 访问权限。您可以这样做:

sudo chown 1000 /path/on/host

然后

sudo chmod u+rw /path/on/host

注意:由于其他 iotedge docker 容器的用户也有 UID 1000,因此他们也可以访问该文件夹。主机的第一个非root用户(通常也有UID 1000)也是如此。

如果您需要从 Windows 到 Windows,您可以这样做:

"createOptions": {
"HostConfig": {
    "Binds": [
        "C:\Temp\output:C:\app\files\"
     ]
 }

}

我还没有想出如何从 windows 到 linux。