无网络Docker容器离线安装node-red-contrib-influxdb遇EAI_AGAIN错误的解决方法
Node-RED Docker容器离线安装node-red-contrib-influxdb失败解决方法
问题描述
我需要在无网络的Node-RED Docker容器中安装node-red-contrib-influxdb包。已在联网Windows电脑上安装Node.js,下载该包及npm-pack-all工具,在包安装目录运行npm-pack-all生成tgz文件后复制到容器执行npm install,却出现如下错误:
npm ERR! code EAI_AGAIN npm ERR! errno EAI_AGAIN npm ERR! request to https://registry.npmjs.org/influx failed, reason: getaddrinfo EAI_AGAIN registry.npmjs.org npm ERR! A complete log of this run can be found in: npm ERR! /usr/src/node-red/.npm/_logs/2023-01-31T14_33_13_404Z-debug.log
日志关键内容:
15 silly resolveWithNewModule node-red-contrib-influxdb@0.6.1 checking installable status 16 silly fetchPackageMetaData error for influx@5.6.3 request to https://registry.npmjs.org/influx failed, reason: getaddrinfo EAI_AGAIN registry.npmjs.org ... 29 error request to https://registry.npmjs.org/influx failed, reason: getaddrinfo EAI_AGAIN registry.npmjs.org
错误本质:仅打包node-red-contrib-influxdb本身时,其依赖(如influx包)未被包含,离线安装时npm仍会尝试联网拉取依赖,导致网络请求失败。
解决步骤
1. 在联网机器上完整下载所有依赖
在Windows联网电脑上创建空目录,执行命令下载目标包及所有嵌套依赖:
npm install node-red-contrib-influxdb --no-save
执行后,当前目录的node_modules文件夹会包含所有所需依赖。
2. 打包包含全部依赖的完整包
先全局安装npm-pack-all工具(未安装时执行):
npm install -g npm-pack-all
在包含node_modules和package-lock.json的目录下,运行打包命令:
npm-pack-all
生成的tgz包会包含目标包及其所有依赖,避免离线安装时的联网请求。
3. 离线容器内安装包
将生成的完整tgz包复制到Node-RED容器的目标目录(如/data),执行离线安装命令:
npm install ./node-red-contrib-influxdb-xxx.tgz --no-audit --no-fund --offline
--offline:强制npm使用本地资源,禁止联网请求--no-audit/--no-fund:跳过不必要的联网检查,提升安装效率
4. 验证安装结果
重启Node-RED容器后,在编辑器节点面板中查看InfluxDB相关节点,确认安装成功。
备选高效方案:构建自定义镜像
若需多次部署,可在联网机器上提前构建包含目标包的自定义Node-RED镜像:
- 创建
Dockerfile:
FROM nodered/node-red:latest WORKDIR /usr/src/node-red RUN npm install node-red-contrib-influxdb
- 构建镜像:
docker build -t my-node-red-influx .
- 导出镜像为tar文件:
docker save -o my-node-red-influx.tar my-node-red-influx
- 在无网络机器上加载镜像并运行:
docker load -i my-node-red-influx.tar docker run -d -p 1880:1880 --name my-node-red my-node-red-influx
内容的提问来源于stack exchange,提问作者Nyxeria
相关产品推荐
相关产品推荐

