我找到的解决方案(解决方法)是基于添加npm install
到 docker 入口点,它是如何工作的?
挂载到本地文件夹
首先,我们要运行Node-Red,并将其卷挂载/data
到我们的本地文件夹:
docker run -p 1880:1880 -v $(pwd)/node-red:/data nodered/node-red
现在,如果您从本地git repo运行,您将获得一个名为的文件夹node-red
,它将包含所有Node-Red工作区。
将Node-Red数据添加到Git
要仅跟踪Node-Red配置文件,您需要将下一个条目添加到您的.gitignore
文件中:
node-red/*
!node-red/package.json
!node-red/package-lock.json
!node-red/flows.json
!node-red/flows_cred.json
!node-red/settings.js
所有其他文件都是自动生成的。
在启动时安装缺少的包
现在,最困难的部分。如果您在本地环境中添加了一个新库并推送了更改,那么您希望Node-Red在新库启动之前安装它。
我们将从Node-Red Dockerfile获取原始的Node-Red启动命令:
npm --no-update-notifier --no-fund start --cache /data/.npm -- --userDir /data
在此命令之前,我们将采用为自定义 dockernpm install
建议的命令:
npm install --unsafe-perm --no-update-notifier --no-fund --only=production
这是我的最终docker-compose.yml
文件,其中包含docker run
在开发环境中仅运行此映像的命令行:
node-red:
# port 1880
# Dev: docker run -p 1880:1880 -v $(pwd)/node-red:/data --entrypoint="" --env-file .env nodered/node-red /bin/sh -c "npm install --prefix /data --unsafe-perm --no-update-notifier --no-fund --only=production && npm --no-update-notifier --no-fund start --cache /data/.npm -- --userDir /data"
image: nodered/node-red
env_file:
- shared.env
network_mode: host
entrypoint: >
sh -c "
npm install --prefix /data --unsafe-perm --no-update-notifier --no-fund --only=production
&& npm --no-update-notifier --no-fund start --cache /data/.npm -- --userDir /data"
environment:
NODE_RED_CREDENTIAL_SECRET: ${NODE_RED_CREDENTIAL_SECRET}
volumes:
- ./node-red:/data
restart: unless-stopped