我正在使用具有以下内容的Dockerfile,该文件是我在树莓派上使用resin.io进行部署的。
FROM nodered/node-red-docker:rpi-v8
USER root
RUN sudo setcap 'cap_net_bind_service=+ep' $(eval readlink -f `which node`)
USER node-red
我还想更新Node-RED使用的settings.js
,但我不知道该怎么做。
我已经创建了文件settings.js
,并在RUN命令之后将以下行添加到了Dockerfile中……它确实由resin.io进行了构建和部署,没有任何错误。
COPY settings.js /data/
...但是在检查/data/
文件夹时,我发现settings.js
没有更新。我仍然可以看到旧的settings.js
,它是由先前的部署和容器的启动自动创建的。
仅供参考,我的容器/data
文件夹中的内容:
node-red@997563c:~$ ls -l /data
total 24
-rw-r--r-- 1 node-red node-red 283 Oct 28 08:57 flows.json
drwxr-xr-x 3 node-red node-red 4096 Oct 27 10:44 lib
drwxr-xr-x 3 root root 4096 Oct 26 22:27 node-red
-rw-r--r-- 1 node-red node-red 120 Oct 27 16:44 package.json
-rw-r--r-- 1 node-red node-red 8091 Oct 27 10:44 settings.js
node-red@997563c:~$
此处仅供参考,下面是容器日志文件的内容,其中涉及Node-RED应用程序的启动:
28.10.18 11:18:03 (+0100) Starting service 'main sha256:472f9797c9288bc3d5a9147597fd33fb982ab34f4eb0e467f70842f05a421f3b'
28.10.18 11:18:04 (+0100) main mount: only root can use "--types" option
28.10.18 11:18:04 (+0100) main mount: only root can use "--move" option
28.10.18 11:18:04 (+0100) main mount: only root can use "--move" option
28.10.18 11:18:04 (+0100) main mount: only root can use "--move" option
28.10.18 11:18:04 (+0100) main mount: only root can use "--move" option
28.10.18 11:18:04 (+0100) main umount: /dev: umount failed: Operation not permitted
28.10.18 11:18:04 (+0100) main mount: only root can use "--move" option
28.10.18 11:18:04 (+0100) main ln: cannot remove ‘/dev/ptmx’: Permission denied
28.10.18 11:18:04 (+0100) main mount: only root can use "--types" option
28.10.18 11:18:04 (+0100) main /sbin/udevd
28.10.18 11:18:04 (+0100) Started service 'main sha256:472f9797c9288bc3d5a9147597fd33fb982ab34f4eb0e467f70842f05a421f3b'
28.10.18 11:18:05 (+0100) main npm info it worked if it ends with ok
28.10.18 11:18:05 (+0100) main npm info using npm@5.0.3
28.10.18 11:18:05 (+0100) main npm info using node@v8.1.3
npm info lifecycle node-red-docker@1.0.0~prestart: node-red-docker@1.0.0
npm info lifecycle node-red-docker@1.0.0~start: node-red-docker@1.0.0
28.10.18 11:18:05 (+0100) main
28.10.18 11:18:05 (+0100) main > node-red-docker@1.0.0 start /usr/src/node-red
28.10.18 11:18:05 (+0100) main > node $NODE_OPTIONS node_modules/node-red/red.js -v $FLOWS "--userDir" "/data"
28.10.18 11:18:05 (+0100) main
28.10.18 11:18:08 (+0100) main 28 Oct 10:18:08 - [info]
28.10.18 11:18:08 (+0100) main
28.10.18 11:18:08 (+0100) main Welcome to Node-RED
28.10.18 11:18:08 (+0100) main ===================
28.10.18 11:18:08 (+0100) main
28.10.18 11:18:08 (+0100) main 28 Oct 10:18:08 - [info] Node-RED version: v0.19.4
28.10.18 11:18:08 (+0100) main 28 Oct 10:18:08 - [info] Node.js version: v8.1.3
28.10.18 11:18:08 (+0100) main 28 Oct 10:18:08 - [info] Linux 4.14.39 arm LE
28.10.18 11:18:09 (+0100) main 28 Oct 10:18:09 - [info] Loading palette nodes
28.10.18 11:18:12 (+0100) main 28 Oct 10:18:12 - [info] Settings file : /data/settings.js
28.10.18 11:18:12 (+0100) main 28 Oct 10:18:12 - [info] Context store : 'default' [module=memory]
28.10.18 11:18:12 (+0100) main 28 Oct 10:18:12 - [info] User directory : /data
28.10.18 11:18:12 (+0100) main 28 Oct 10:18:12 - [warn] Projects disabled : editorTheme.projects.enabled=false
28.10.18 11:18:12 (+0100) main 28 Oct 10:18:12 - [info] Flows file : /data/flows.json
28.10.18 11:18:12 (+0100) main 28 Oct 10:18:12 - [info] Server now running at http://127.0.0.1:80/
28.10.18 11:18:12 (+0100) main 28 Oct 10:18:12 - [warn]
28.10.18 11:18:12 (+0100) main
28.10.18 11:18:12 (+0100) main ---------------------------------------------------------------------
28.10.18 11:18:12 (+0100) main Your flow credentials file is encrypted using a system-generated key.
28.10.18 11:18:12 (+0100) main
28.10.18 11:18:12 (+0100) main If the system-generated key is lost for any reason, your credentials
28.10.18 11:18:12 (+0100) main file will not be recoverable, you will have to delete it and re-enter
28.10.18 11:18:12 (+0100) main your credentials.
28.10.18 11:18:12 (+0100) main
28.10.18 11:18:12 (+0100) main You should set your own key using the 'credentialSecret' option in
28.10.18 11:18:12 (+0100) main your settings file. Node-RED will then re-encrypt your credentials
28.10.18 11:18:12 (+0100) main file using your chosen key the next time you deploy a change.
28.10.18 11:18:12 (+0100) main ---------------------------------------------------------------------
28.10.18 11:18:12 (+0100) main
28.10.18 11:18:12 (+0100) main 28 Oct 10:18:12 - [info] Starting flows
28.10.18 11:18:12 (+0100) main 28 Oct 10:18:12 - [info] Started flows
仅供参考,我的docker容器的df
输出:
node-red@997563c:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
none 6794760 748316 5677608 12% /
tmpfs 65536 0 65536 0% /dev
/dev/mmcblk0p6 6794760 748316 5677608 12% /data
none 306201 245637 40494 86% /lib/modules
tmpfs 499556 0 499556 0% /tmp/resin
shm 65536 0 65536 0% /dev/shm
tmpfs 499556 10024 489532 3% /host/run/dbus
node-red@997563c:~$
第一次更新(2018-10-28):
以下2个链接描述了如何将settings.js
作为node-RED的Docker构建脚本的一部分提供。因此从技术上讲是可行的,但目前我不知道如何使用官方的nodered/node-red-docker存储库
答案 0 :(得分:1)
好的,所以问题将是`/ data'被安装在docker映像中的任何内容之上。
/data
的内容将由您推送到resin.io设备的早期版本的Docker映像确定。
我可以看到2个选项:
settings.js
并重新启动答案 1 :(得分:0)
根本原因:
此问题实际上是由于以下事实:resin.io使用/data
文件夹进行持久性存储,并且仅在首次为该设备创建容器时才能将文件复制到此文件夹。因此,容器的后续部署不会更改/data
文件夹的内容。
这在https://docs.resin.io/learn/develop/runtime/#persistent-storage中也有描述。相关部分复制粘贴如下:
永久存储
如果您有要通过应用程序和主机OS更新保留的数据或配置,则可以选择将其保留在永久存储中。永久存储是写系统日志和其他应用程序数据的好地方,即使您的代码更改,这些日志也应保持不变
...
resinOS v2.12.0及更高版本
从resinOS v2.12.0开始,永久 存储通过命名卷处理。行为很 与旧版主机OS上的永久性存储相同。实际上,对于 单容器应用程序,默认设置docker-compose.yml 名为树脂数据的卷,该卷链接到目录中的
/data
目录 容器。此版本与早期版本之间的唯一区别是 通过主机操作系统访问此数据的操作是在 / var / lib / docker / volumes / _resin-data / _data,而不是 / mnt / data / resin-data /与早期主机OS一起使用的位置 版本。命名卷可以被赋予任意名称,并且可以链接到 目录放在一个或多个容器中。只要每次发布 应用程序包含docker-compose.yml,卷名不 更改后,该卷中的数据将在更新之间保持不变。
使用命名卷时,请注意:
如果将设备移至新应用程序,则旧的
/data
文件夹将 自动清除。 在构建过程中,数据已添加到 配置为链接到命名卷的容器目录将 会在首次在设备上创建该卷时将其复制到该卷中。。
解决方案:
为了确保有效执行Dockerfile中的以下指令:
COPY settings.js /data/
您必须在resin.io信息中心中执行以下步骤。
第2步将确保/data
文件夹被完全擦除。
第3步将确保settings.js
被有效地复制到/data
文件夹,因为这是该映像第一次在该设备上部署。
仅供参考:URL https://docs.resin.io/learn/manage/actions/#move-to-another-application描述了移至另一个应用程序的操作。
在该页面上,您还可以找到以下语句:
警告::对于运行resinOS 2.12.0及更高版本的设备,数据位于 永久存储(命名卷)在以下情况下会自动清除: 设备已移至新应用程序。