You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu VPS上Docker部署Discord Bot遇Node.js版本过低错误及Linux Node.js版本更新方法咨询

解决Discord机器人Node.js版本不兼容问题

嘿,这个问题其实很好理解——你新部署的第三个机器人依赖的库(比如新版Discord.js或者相关插件)要求Node.js版本至少14.x,但你现在用的Docker镜像还是12.20.0,版本不匹配直接触发了报错。至于其他两个机器人能正常跑,是因为它们依赖的是旧版本的库,对Node.js的版本要求更低,刚好适配12.20.0。

下面给你两种解决方案,优先推荐第一种,完全符合Docker的设计思路:

方案一:更换Docker基础镜像(最省心的做法)

Docker的核心就是环境隔离,完全没必要让新机器人和老机器人共享同一个Node.js版本。你只需要改一行Dockerfile就行:

  1. 打开你的Dockerfile,把第一行的FROM node:12.20.0换成支持的Node.js LTS版本,比如:
    FROM node:14.21.3  # 14系列的最后一个LTS版本,稳定又靠谱
    # 要是机器人支持的话,也可以用更新的LTS版本,比如18.18.2
    # FROM node:18.18.2
    
  2. 重新构建机器人的镜像:
    docker build -t your-third-bot-image .
    
  3. 用新镜像启动容器就搞定了。

这种方法不仅干净利落,还能保证每个容器的环境独立,完全不会影响其他用Node.js 12的机器人,绝对是最佳实践。

方案二:在现有Node.js 12镜像里升级版本(不推荐)

如果你非要在现有镜像基础上升级Node.js(真心不建议,会让镜像变臃肿还破坏环境一致性),可以用nvm(Node版本管理器)来操作:

修改你的Dockerfile成这样:

FROM node:12.20.0
# 安装nvm
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 配置nvm的环境变量
ENV NVM_DIR="/root/.nvm"
RUN . "$NVM_DIR/nvm.sh" && nvm install 14
RUN . "$NVM_DIR/nvm.sh" && nvm alias default 14
# 后续的目录创建、依赖安装和代码复制
RUN mkdir -p /usr/src/bot
WORKDIR /usr/src/bot
COPY package.json /usr/src/bot
RUN . "$NVM_DIR/nvm.sh" && npm install
COPY . /usr/src/bot
# 启动时要加载nvm环境
CMD ["bash", "-c", ". $NVM_DIR/nvm.sh && node index.js"]

之后重新构建镜像启动容器就行。不过还是那句话,这种方式不如直接换基础镜像高效,除非你有特殊需求。

最后提个小建议:你可以看看新机器人package.json里的engines字段,或者它依赖库的官方文档,就能明确知道需要哪个Node.js版本了(比如Discord.js v13要求Node.js 16.6+,v12才适配Node.js 12.20+)。

内容的提问来源于stack exchange,提问作者SirArchibald

火山引擎 最新活动