如何在 CentOS 7 环境中通过 Docker 部署 Node.js 24 服务

如何在 CentOS 7 环境中通过 Docker 部署 Node.js 24 服务

  1. 小说前端 🧩
  2. 2026-10-10 12:00
  3. 9 min read

CentOS 7 作为经典的 Linux 发行版,目前在很多长期维护的生产服务器中依然存在。但随着技术栈迭代,其基础运行环境(特别是最高仅原生支持 GLIBC 2.17,而 Node.js 18+ 普遍要求 GLIBC 2.28 及以上版本)成了运行现代前端与 Node 服务的一道硬伤。

如果在宿主机上强行编译升级 glibc,极易导致系统核心命令甚至 SSH 瘫痪。因此,借助 Docker 容器化运行是成本最低、环境最干净、最稳妥的解决方案。

CentOS 7 x Docker 运行 Node.js 24 架构隔离解析

本文将详细介绍如何在 CentOS 7 上规范安装最新版 Docker CE、部署 Node.js 24 服务,以及解决国内网络环境下拉取镜像超时的常见问题。


避坑提示:不要直接执行 yum install docker

在 CentOS 7 上,如果直接执行 sudo yum install -y docker,系统会安装 CentOS 官方源自带的 Docker 包。

[!WARNING] CentOS 官方源自带的 Docker 是由 Red Hat 很多年前维护的极老版本(通常为 1.13.x,发布于 2017 年)。该版本不仅缺少现代容器的很多安全与性能特性,而且完全不支持现代 Docker Compose 语法与规范镜像格式。

正确的做法是:配置 Docker 官方或国内镜像源,安装官方维护的 Docker CE(Community Edition,社区版)。安装 Docker CE 时,系统还会顺带安装 docker-compose-plugin,直接支持 docker compose 子命令。


一、CentOS 7 安装 Docker CE 完整流程

步骤 1:卸载可能存在的历史旧版本

如果系统之前安装过旧版本 Docker,请先执行以下清理命令(全新系统执行亦可,未安装的组件会自动跳过):

sudo yum remove -y docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine

步骤 2:安装必要依赖并添加 Docker CE 软件源

安装管理仓库源的必备工具 yum-utils,并配置国内镜像源(推荐阿里云,国内下载速度稳定):

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

# 2. 添加阿里云 Docker CE 软件源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

验证方式:检查 /etc/yum.repos.d/ 目录下是否成功生成了 docker-ce.repo 文件。

步骤 3:安装 Docker CE 与 Compose 插件

直接使用 yum 安装稳定版 Docker 及其核心组件(包含官方的 Compose 插件):

sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

验证方式:终端输出最后出现 Complete! 即表示安装成功。

步骤 4:启动 Docker 守护进程并设置开机自启

sudo systemctl enable --now docker

验证方式:运行 sudo systemctl status docker,看到绿色的 active (running) 即表示服务已正常运行。

步骤 5:环境双重验证

运行以下命令确认 Docker 与 Docker Compose 均已就绪:

docker --version
docker compose version

终端应分别输出类似以下信息:

Docker version 26.x.x, build ...
Docker Compose version v2.x.x

实用技巧:配置免 sudo 运行(可选)

默认情况下,只有 root 用户或具备 sudo 权限的用户才能与 Docker 守护进程通信。如果日常使用普通用户登录,可以将当前用户加入 docker 用户组:

# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER

# 刷新用户组(或退出终端重新登录)
newgrp docker

配置后即可直接运行 docker ps 等命令,无需每次在前面加上 sudo。


二、实战:使用 Docker 部署 Node.js 24 服务

环境准备就绪后,接下来以一个轻量的 Node.js 24 服务为例进行部署演示。

1. 准备项目文件

在服务器上新建项目目录并进入:

mkdir -p ~/node24-app && cd ~/node24-app

创建简单的 server.js:

const http = require('node:http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
  res.end(JSON.stringify({
    message: 'Hello from Node.js on CentOS 7!',
    nodeVersion: process.version,
    platform: process.platform,
    time: new Date().toISOString()
  }));
});

const PORT = process.env.PORT || 3000;
server.listen(PORT, '0.0.0.0', () => {
  console.log(`Server running at http://0.0.0.0:${PORT}/`);
});

创建 package.json:

{
  "name": "node24-centos7-demo",
  "version": "1.0.0",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  }
}

2. 编写 Dockerfile

推荐使用官方轻量镜像 node:24-bookworm-slim(基于 Debian 12,体积小且兼容性好):

FROM node:24-bookworm-slim

# 设置工作目录
WORKDIR /app

# 设置环境变量
ENV NODE_ENV=production

# 复制依赖文件并安装(如有)
COPY package*.json ./
# 如果有依赖包可取消下一行注释:
# RUN npm ci --omit=dev

# 复制应用源码
COPY . .

# 暴露端口
EXPOSE 3000

# 启动服务
CMD ["npm", "start"]

3. 编写 docker-compose.yml

使用现代的 Compose 文件规范编排服务:

services:
  app:
    build: .
    container_name: node24-service
    restart: always
    ports:
      - "3000:3000"
    environment:
      - PORT=3000

4. 启动与测试服务

在项目目录下执行后台构建并启动:

docker compose up -d

启动完成后,通过 curl 测试本地服务:

curl http://127.0.0.1:3000

预期响应结果:

{
  "message": "Hello from Node.js on CentOS 7!",
  "nodeVersion": "v24.x.x",
  "platform": "linux",
  "time": "..."
}

至此,一个现代化的 Node.js 24 服务便已经在 CentOS 7 环境中顺利稳定地运行起来。


三、常见问题与网络排错

报错:dial tcp ...:443: connect: connection timed out

问题分析

在拉取 Docker 镜像(如 docker pull node:24-bookworm-slim)时,终端若报类似如下错误:

Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 157.240.x.x:443: connect: connection timed out

这是因为服务器所在网络环境无法直连访问 Docker Hub 官方域名导致的超时。针对该问题有两种常用解决方案。


方案一:配置 Docker 镜像加速源(推荐,全局生效)

通过编辑 Docker 守护进程配置文件 /etc/docker/daemon.json 配置国内加速器:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://hub-mirror.c.163.com"
  ]
}
EOF

[!NOTE] 国内公共镜像加速地址的可用性可能会随时间变化,配置多个加速地址有助于 Docker 在拉取失败时自动重试其他镜像节点。

重启守护进程生效:

sudo systemctl daemon-reload
sudo systemctl restart docker

验证方式:运行 docker info,在输出末尾检查 Registry Mirrors 列表中是否已包含刚刚配置的地址。

重新测试拉取:

docker pull node:24-bookworm-slim

方案二:在 Dockerfile / Compose 中改用代理镜像前缀(应急方案)

如果不想更改宿主机的全局 Docker 配置,也可以直接在镜像名开头添加公开的镜像代理前缀。

在 Dockerfile 中替换:

# 原写法:
# FROM node:24-bookworm-slim

# 改为带代理前缀的镜像源:
FROM docker.m.daocloud.io/library/node:24-bookworm-slim

在 docker-compose.yml 中替换:

services:
  app:
    image: docker.m.daocloud.io/library/node:24-bookworm-slim

验证方式:重新执行 docker compose up -d 或 docker build .,观察镜像层是否可以顺畅下载。


结语

CentOS 7 的停更并不意味着它无法承担现代 Web 服务的职责。通过 Docker,我们成功规避了老系统 GLIBC 版本不足这一最大障碍,不仅实现了 Node.js 24 应用的平滑运行,还获得了容器化带来的环境隔离与便于迁移的天然优势。

NodejsDockerCentOSLinux