我必须在容器中安装很多缺少的节点红色节点。保留(命名的)容器并用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