防止在更新 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。
我实现了一个将文件保存到光盘的 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。