node.js - Meteor Docker Node.js 版本不匹配
问题描述
我刚刚构建了一个流星 docker,Docker 安装了 node.js 版本 8.9.4。构建成功后查看docker日志,说meteor需要更高的node版本(12.0以上)。像这样的错误:
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - /app/bundle/programs/server/mini-files.js:1
data: /app/bundle/main.js:34 - (function (exports, require, module, __filename, __dirname) { module.export({
data: /app/bundle/main.js:34 - ^
data: /app/bundle/main.js:34 - TypeError: module.export is not a function
data: /app/bundle/main.js:34 - at Object.<anonymous> (/app/bundle/programs/server/mini-files.js:1:76)
data: /app/bundle/main.js:34 - at Module._compile (module.js:643:30)
data: /app/bundle/main.js:34 - at Object.Module._extensions..js (module.js:654:10)
data: /app/bundle/main.js:34 - at Module.load (module.js:556:32)
data: /app/bundle/main.js:34 - at tryModuleLoad (module.js:499:12)
data: /app/bundle/main.js:34 - at Function.Module._load (module.js:491:3)
data: /app/bundle/main.js:34 - at Module.require (module.js:587:17)
data: /app/bundle/main.js:34 - at require (internal/module.js:11:18)
data: /app/bundle/main.js:34 - at Object.<anonymous> (/app/bundle/programs/server/boot.js:14:15)
data: /app/bundle/main.js:34 - at Object.<anonymous> (/app/bundle/programs/server/boot.js:469:3)
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - error: Script restart attempt #1
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - /app/bundle/programs/server/mini-files.js:1
data: /app/bundle/main.js:34 - (function (exports, require, module, __filename, __dirname) { module.exports({
data: /app/bundle/main.js:34 - ^
data: /app/bundle/main.js:34 - TypeError: module.exports is not a function
data: /app/bundle/main.js:34 - at Object.<anonymous> (/app/bundle/programs/server/mini-files.js:1:70)
data: /app/bundle/main.js:34 - at Module._compile (module.js:643:30)
data: /app/bundle/main.js:34 - at Module.Mp._compile (/app/bundle/programs/server/runtime.js:50:23)
data: /app/bundle/main.js:34 - at Object.Module._extensions..js (module.js:654:10)
data: /app/bundle/main.js:34 - at Module.load (module.js:556:32)
data: /app/bundle/main.js:34 - at Module.Mp.load (/app/bundle/programs/server/runtime.js:15:31)
data: /app/bundle/main.js:34 - at tryModuleLoad (module.js:499:12)
data: /app/bundle/main.js:34 - at Function.Module._load (module.js:491:3)
data: /app/bundle/main.js:34 - at Module.require (module.js:587:17)
data: /app/bundle/main.js:34 - at require (internal/module.js:11:18)
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - error: Script restart attempt #1
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
error: undefined
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
(base) [wangz35@ehslocvld01 tblBuilder]$
所以我检查了我的dockerfile,它说FROM node.8.9.4,所以我把它改成了节点16.10.0。
# node version dependent on meteor version
#FROM node:8.9.4
## node 16.10.0 is used for meteor 2.2, check release file.
FROM node:16.10.0
然后重新部署它。在部署过程中,我发现很多包在这个节点版本期间无法安装。如jessie-backport、jessie。
RUN \
echo "deb [check-valid-until=no] http://cdn-fastly.deb.debian.org/debian jessie main" > /etc/apt/sources.list.d/jessie.list && \
echo "deb [check-valid-until=no] http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list && \
sed -i '/deb http:\/\/deb.debian.org\/debian jessie-updates main/d' /etc/apt/sources.list && \
apt-get -o Acquire::Check-Valid-Until=false update && \
\
他们给出了这样的错误,我确信当我将 node.js 更改为 8.9.4 时这些错误不会出现:
W: GPG error: http://cdn-fastly.deb.debian.org/debian jessie Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7638D0442B90D010 NO_PUBKEY CBF8D6FD518E17E1
out: E: The repository 'http://cdn-fastly.deb.debian.org/debian jessie Release' is not signed.
out: W: GPG error: http://archive.debian.org/debian jessie-backports InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 8B48AD6246925553 NO_PUBKEY 7638D0442B90D010
out: E: The repository 'http://archive.debian.org/debian jessie-backports InRelease' is not signed.
我发现这些错误很难解决。我总结了一些解决方案:
- 将较旧的流星(1.2)与 node.js(8.6.4)一起使用。这是我们以前的项目。
- 继续根据 node.js (16.10) 找出错误,这需要时间。
- 或者有什么方法可以改变正在运行的 docker node.js 版本?
任何人都擅长这个 docker deploy,也许可以给我一些建议。先感谢您。
解决方案
如果你想在meteor 旁边安装debian 包,那么你应该启动FROM
一个debian 映像,而不是其中一个node
,然后从你的Dockerfile中的nodesource.com 获取节点并安装它,以确保你得到正确的版本。顺便说一句,如果我没记错的话,meteor 2.2 使用节点 14,而不是 16(还不是 LTS)。
推荐阅读
- python - 在案例中使用全局变量的 Python 匹配/案例(可通过使用类解决)
- python - 如何恢复样本属于python中最大的熵值
- java - 求解两个未知变量和两个函数
- javascript - 写入文本文件 NodeJS 的特定部分
- json - Unmarshal json 具有多种类型的数据,没有键
- r - 列名与 head(df) 和 colnames(df) 显示不同
- python - 如何使 pyenv 在 Windows 中正常工作?
- selenium - StaleElementReferenceException:消息:过时的元素引用:元素未附加到页面文档
- amazon-web-services - 为以特定值结尾的字符串设置 IAM 策略
- testing - 使用 Taurus 按顺序运行 JMeter 测试