Docker Node-Red:将已安装的节点保留在容器外

Docker Node-Red: Keep installed nodes outside container

我必须将大量缺少的节点-红色节点安装到容器中。保留(命名的)容器并将其 运行 与 docker start 连接起来工作正常。

现在我想将安装的节点保存在单独的外部目录中。如果我挂载 /data 做一个外部目录,它基本上可以工作但没有帮助,因为节点安装在 ~/node_modules 中。如果我尝试将 ~/node_modules 挂载到外部目录,node-red 无法启动。

那么我该怎么做才能让我安装的节点独立于执行的容器?

编辑: 同时我做了运行图像如下:

#!/bin/bash
sudo -E docker run -it --rm -p 1893:1880 -p 11893:11880 
  \ -e TZ=Europe/Berlin -e NPM_CONFIG_PREFIX=/data/node_modules/ 
  \ -e NODE_PATH=/usr/src/node-red/node_modules:/data/node_modules:/data/node_modules/lib/node_modules 
  \ --log-driver none --mount type=bind,source="$(pwd)"/data,target=/data 
  \ --name myNodeRed nodered/node-red

但是目录 /data/node_modules/lib/node_modules 中的其他已安装节点仍然不可见。

编辑 2: 与此同时,我试图保留容器。所以很明显,使用 npm install -g 安装的节点被完全忽略了。

容器内 Node-RED 实例的默认用户不是 root(通常),因此您需要确保安装到 /data 位置的任何卷都可由该用户写入。您可以通过将用户 ID 传递给容器以使其与对挂载点具有写权限的外部用户相匹配来做到这一点:

docker run -it --rm -v $(pwd)/data:/data -u $USER -e TZ=Europe/Berlin
 \ -p 1893:1880 -p 11893:11880 --log-driver none
 \ --name myNodeRed nodered/node-red

Node-RED 节点不应使用 -g 选项安装,您应该使用调色板管理器中的构建,或者如果您确实需要使用命令行,运行 npm install <node-name> 在容器内的 /data 目录中(但是您需要重新启动容器才能拾取新安装的节点,这也是您应该使用调色板管理器的原因)