【问题标题】:Meteor Docker Node.js version is not matchMeteor Docker Node.js 版本不匹配
【发布时间】:2021-11-28 19:51:46
【问题描述】:

我刚刚构建了一个流星 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. 在 node.js(8.6.4) 中使用较旧的流星(1.2)。这是我们以前的项目。
  2. 根据 node.js (16.10) 继续找出错误,这需要时间。
  3. 或者有什么方法可以更改正在运行的 docker node.js 版本?

任何人都擅长这个 docker deploy,也许可以给我一些建议。 提前谢谢你。

【问题讨论】:

    标签: node.js docker meteor docker-compose


    【解决方案1】:

    如果你想在流星旁边安装 debian 包,那么你应该启动 FROM 一个 debian 映像,而不是 node 之一,然后只需从 Dockerfile 中的 nodesource.com 获取节点并安装它,即可确保你得到正确的版本。顺便说一句,如果我没记错的话,meteor 2.2 使用节点 14,而不是 16(还不是 LTS)。

    【讨论】:

    • 谢谢。你是对的,它是节点 14。我想既然我在本地井中使用了流星 2.2,节点 8.9.6,为什么当它在部署的 docker 中时,流星 2.2 要求上面的节点 12。我真的不想将 docker 文件从 8.9.6 更改为节点 12。这会给我带来很多麻烦。
    【解决方案2】:

    在我的项目中,每个 Dockerfile 我都设置了 Meteor 版本应该使用的 Node 的确切版本。通用版本不是一个好主意。

    例如:一个Meteor App 2.4版本,我用的是Node 14.17.6版本

    您可以在Meteor Changelog documentation 中获取 Meteor vs Node 版本

    【讨论】:

    • 您还可以在开发过程中使用命令meteor node -v 快速检查您的Meteor 项目Node 版本,并在生产构建后在文件.node_version.txt 中快速检查。
    • 谢谢。你是对的,它是节点 14。我想既然我在本地井中使用了流星 2.2,节点 8.9.6,为什么当它在部署的 docker 中时,流星 2.2 要求上面的节点 12。我真的不想将 docker 文件从 8.9.6 更改为节点 12。这会给我带来很多麻烦。
    • 如果你的 Meteor 是 2.2,你的 Node 就不能是 8。请参阅在你的根项目中使用命令 meteor node -v。我相信您在您的操作系统中看到了 Node 的版本,而不是在项目中。
    猜你喜欢
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 2016-12-09
    • 2012-04-22
    • 2023-03-19
    相关资源
    最近更新 更多