0%

在旧版本服务器上使用 Docker 部署 Node.js

问题背景

记录下在新服务器47.77.199.109遇到的系统版本较低无法安装高版本node的解决方案以及使用指令:

问题报错

1
2
3
4
# 安装 Node.js 18 时报错
error: Failed dependencies:
libstdc++.so.6(GLIBCXX_3.4.20) is needed by nodejs-18.x
GLIBC_2.28 is needed by nodejs-18.x

这是由于旧服务器的 glibc 和相关依赖过低,导致无法支持高版本 Node.js。


思路解决

在不更换或升级操作系统的情况下,解决方法有两个:

  1. 手动编译升级依赖
    但升级 glibc 风险极高,可能导致系统不稳定,生产环境并不推荐。

  2. 使用 Docker ✅(推荐)
    借助 Docker 容器运行高版本 Node.js,避免宿主机依赖问题,同时保持环境隔离与灵活性。


安装 Docker

以 CentOS 为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 卸载旧版本
sudo yum remove docker docker-common docker-selinux docker-engine

# 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加 Docker 源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 启动并设置开机启动
sudo systemctl start docker
sudo systemctl enable docker

安装完成后,执行以下命令检查:

1
2
docker -v
# Docker version 20.xx.x, build xxxxx

使用 Docker 运行 Node.js

1. 直接运行 Node.js 容器

1
docker run -it --name mynode -v $(pwd):/app -w /app node:20 bash

说明:

  • --name mynode 容器名称
  • -v $(pwd):/app 挂载当前目录到容器 /app
  • -w /app 设置工作目录
  • node:20 使用官方 Node.js 20 镜像

进入容器后即可使用高版本 Node:

1
2
node -v
# v20.x.x

2. 使用 Dockerfile 构建自定义镜像

在项目根目录新建 Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 使用官方 Node.js 20 镜像
FROM node:20

# 设置工作目录
WORKDIR /usr/src/app

# 拷贝依赖文件
COPY package*.json ./

# 安装依赖
RUN npm install

# 拷贝项目文件
COPY . .

# 暴露端口
EXPOSE 3000

# 启动命令
CMD ["node", "server.js"]

第一次构建和运行:

打开需要运行node的目录,执行:

1
2
3
4
5
# 构建镜像
docker build -t mynode-app .

# 运行容器
docker run -d -p 3000:3000 --name myapp mynode-app

后续启动和停止

mynode-app为例:

1
2
3
4
5
6
7
8
9
# 启动容器
sudo docker start mynode-app

# 停止容器
sudo docker stop mynode-app

# 查看日志
sudo docker logs -f mynode-app

更新容器代码

容器里的代码是构建镜像时打包进去的,因此要更新:

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 停止并删除旧容器
sudo docker stop mynode-app
sudo docker rm mynode-app

# 2. (可选)删除旧镜像
sudo docker rmi mynode-app

# 3. 重新构建新镜像
docker build -t mynode-app .

# 4. 启动新容器
docker run -d -p 3000:3000 --name mynode-app mynode-app

启动方式总结

  1. 一次性运行调试docker run -it node:20 bash
  2. 持久化运行项目:挂载代码目录,或者用 Dockerfile 构建镜像。
  3. 后台运行服务docker run -d -p 3000:3000 mynode-app

总结

  • 问题:旧版本服务器无法直接安装高版本 Node.js
  • 解决思路:使用 Docker 容器运行,避免依赖冲突
  • 优点:版本独立、环境一致、快速部署、易于维护

通过 Docker,我们可以在不升级服务器系统的前提下,轻松运行最新版本的 Node.js 应用。 🚀

-------------本文结束感谢您的阅读-------------