docker - Docker NodeRed 提交的容器不维护流和模块
问题描述
我正在使用通过 docker 部署的 NodeRed 进行项目,我想保存我的部署状态,包括流程、设置和新添加的模块,以便我可以保存图像并将其加载到另一台复制完全相同 NodeRed 的主机上实例。
我使用以下方法创建了容器:
docker run -itd --name my-nodered node-red
在实现流程并安装一些自定义模块后,在容器运行的情况下,我使用了以下命令:
docker commit my-nodered my-project-nodered/my-nodered:version1
docker save my-project-nodered/my-nodered:version1 > tar-archive.tar.gz
在另一台机器上,我使用以下方法导入了图像:
docker load < tar-archive.tar.gz
并使用以下命令运行它:
docker run -itd my-project-nodered/my-nodered:version1
我获得了一个带有默认 /data 目录的普通 NodeRed docker 容器,并且只保留了数据目录中的文件。
我错过了什么?我的 /data 目录以及主目录中的 settings.js 文件可能被覆盖了吗?在这种情况下,实现我的目标的最佳实践是什么?
非常感谢你提前
解决方案
commit 将不起作用,因为您可以看到Dockerfile中定义了卷。
# User configuration directory volume
VOLUME ["/data"]
这使得不可能在该目录树中创建具有任何不同内容的派生图像。(这与您无法使用预填充数据创建 mysql 或 postgresql 映像的原因相同。)
docker commit 根本不考虑卷,所以你会得到一个没有预加载的未更改的图像。
可以看官方文档
管理用户数据
将 Node-RED 与 Docker 一起运行后,我们需要确保在容器被销毁时不会丢失任何添加的节点或流。可以通过将数据目录挂载到容器外的卷来持久保存这些用户数据。这可以使用绑定挂载或命名数据卷来完成。
Node-RED 使用
/data
容器内的目录来存储用户 配置数据。
一种方法是在另一台机器上恢复您的配置文件,例如backup-config
然后
docker run -it -p 1880:1880 -v $PWD/backup-config/:/data --name mynodered nodered/node-red-docker
或者如果你想完整一些回购,那么你可以尝试
docker run -it --rm -v "$PWD/$(wget https://raw.githubusercontent.com/openenergymonitor/oem_node-red/master/flows_emonpi.json)":/data/ nodered/node-red-docker
推荐阅读
- sql - 使用 SQL Server Express 通过电子邮件发送查询结果
- mysql - 如何解决'Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x96\xA4 t...' for column 'campaign_name' at row 1' in mysql?
- javascript - 具有动态最大高度的 CSS 动画元素
- html - 我如何使用 html 标签创建日历事件?
- reactjs - react-hook-form 只以多级形式注册最后一步的表单数据
- mongodb - mongodb突然要关闭监听套接字
- reactjs - 如何在反应中将图像动画到页面中心
- java - 在 Spring Hibernate 中处理超过 1000 条记录更新
- reactjs - UseState 使用旧值第二次更新了钩子
- linux - 如何通过 bash 向程序发送快捷方式?