Loading... # Debian 系统下安装 Node.js 和修复 Docker 服务 # 一、概述 ## 1. 简介 本文介绍在 Debian 13 (trixie) 系统上安装 Node.js 以及修复 Docker 守护进程无法运行的问题。 ## 2. 为什么学 - Node.js 是前端开发和服务端 JavaScript 运行的必备环境 - Docker 是容器化部署的核心工具,需要正确配置才能使用 - 了解 Docker 的 CLI 和 Engine 组件区别有助于问题排查 ## 3. 学完能做什么 - 在 Debian 系统上安装 Node.js 20 LTS - 诊断并修复 Docker 守护进程未运行的问题 - 理解 Docker 的安装结构和 systemd 服务管理 # 二、环境准备 ## 1. 系统要求 - 操作系统:Debian GNU/Linux 13 (trixie) 或兼容版本 - 权限:需要 sudo 权限执行系统级命令 - 网络:需要访问 NodeSource 仓库和 Docker 官方仓库 ## 2. 安装前检查 检查系统版本: ```bash cat /etc/os-release | grep PRETTY_NAME ``` 检查 Node.js 是否已安装: ```bash which node && node --version || echo "Node.js 未安装" ``` 检查 Docker 安装状态: ```bash which docker && docker --version docker ps ``` # 三、问题分析 ## 1. Docker 守护进程未运行 ### A. 现象描述 执行 `docker ps` 命令时报错: ``` Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? ``` ### B. 根本原因 Docker 由两个主要组件组成: - **Docker CLI**:命令行客户端,用于发送命令给守护进程 - **Docker Engine (docker-ce)**:守护进程,负责实际执行容器操作 本例中: - Docker CLI 已安装 (版本 26.1.5) - Docker Engine (docker-ce) 处于 rc 状态,表示已被移除但配置文件保留 - 缺少 Docker Engine 导致无法启动守护进程 ```mermaid graph TD A[用户执行 docker ps] --> B[Docker CLI] B -->|Unix socket| C{Docker Engine} C -->|存在| D[正常执行] C -->|不存在| E[连接失败] E --> F[报错: Cannot connect to daemon] ```  ### C. 诊断方法 查看已安装的 Docker 相关软件包: ```bash dpkg -l | grep -i docker ``` 输出示例: ``` ii docker-cli 26.1.5+dfsg1-9+b11 amd64 Linux container runtime -- client rc docker-ce 5:29.3.0-1~debian.12~bookworm amd64 Docker: the open-source application container engine ``` - `ii` 表示已安装 - `rc` 表示已移除但配置保留 尝试启动 Docker 服务: ```bash sudo systemctl start docker ``` 若报错 `Unit docker.socket not found`,说明缺少 Docker Engine。 ## 2. Debian 13 与 Docker 仓库 Docker 官方仓库主要针对 Debian 12 (bookworm) 构建,但在 Debian 13 上仍可正常工作。系统已配置 Docker 官方仓库的 bookworm 源。 # 四、解决方案 ## 1. 安装 Node.js 20 LTS ### A. 使用 NodeSource 仓库 NodeSource 提供 Node.js 的 APT 仓库,支持多种 Debian/Ubuntu 版本。 添加 NodeSource 仓库: ```bash curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - ``` 安装 Node.js: ```bash sudo apt-get install -y nodejs ``` ### B. 验证安装 检查 Node.js 版本: ```bash node --version ``` 检查 npm 版本: ```bash npm --version ``` 预期输出: ``` v20.20.1 10.8.2 ``` ## 2. 修复 Docker 服务 ### A. 重新安装 Docker Engine 安装完整的 Docker 组件: ```bash sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` 说明: - `docker-ce`:Docker Engine 核心组件 - `docker-ce-cli`:Docker CLI 命令行工具 - `containerd.io`:容器运行时 - `docker-buildx-plugin`:多平台构建插件 - `docker-compose-plugin`:Docker Compose V2 插件 ### B. 启动 Docker 服务 启动 Docker 守护进程: ```bash sudo systemctl start docker ``` 设置开机自启: ```bash sudo systemctl enable docker ``` 检查服务状态: ```bash sudo systemctl status docker --no-pager ``` 预期输出中应包含: ``` Active: active (running) ``` ### C. 验证 Docker 功能 运行测试容器: ```bash docker ps ``` 若无报错且显示容器列表,表示 Docker 正常工作。 ## 3. Docker 服务架构 Docker 在 systemd 下的运行机制: ```mermaid graph TB A[systemd] -->|启动| B[docker.service] B -->|触发| C[docker.socket] B -->|管理| D[dockerd 守护进程] D -->|监听| E[/run/docker.sock] F[docker CLI] -->|连接| E E -->|命令| D ```  关键组件: - `docker.service`:systemd 服务单元,管理 dockerd 进程 - `docker.socket`:socket 激活单元,按需启动服务 - `dockerd`:Docker 守护进程,通过 Unix socket `/run/docker.sock` 接收命令 - `/run/docker.sock`:Unix socket 文件,CLI 与守护进程的通信通道 # 五、最终结果 安装完成后,各组件版本如下: | 组件 | 版本 | 状态 | |------|------|------| | Node.js | v20.20.1 | ✅ 已安装 | | npm | 10.8.2 | ✅ 已安装 | | Docker Engine | 29.3.0 | ✅ 运行中 | | Docker CLI | 29.3.0 | ✅ 已安装 | | docker-compose | 5.1.0 (V2) | ✅ 已安装 | | containerd | 2.2.1 | ✅ 运行中 | # 六、技术要点 ## 1. Docker 组件区分 | 组件 | 作用 | 必要性 | |------|------|--------| | docker-ce | Docker Engine 核心组件 | 必须 | | docker-ce-cli | 命令行客户端 | 必须 | | containerd.io | 容器运行时 | 必须 | | docker-buildx-plugin | 多平台构建 | 可选 | | docker-compose-plugin | 容器编排 | 可选 | 仅安装 CLI 而不安装 Engine 是无效的,两者缺一不可。 ## 2. Overlay2 存储驱动 Docker 使用 overlay2 作为默认存储驱动,这是推荐的性能最佳选项: - 支持分层存储,节省磁盘空间 - 读写性能优异 - 广泛支持 Linux 内核 查看存储驱动类型: ```bash docker info | grep "Storage Driver" ``` ## 3. nftables 警告处理 首次启动 Docker 时可能看到类似日志: ``` level=info msg="Deleting nftables IPv4 rules" error="exit status 1" ``` 这是 Docker 尝试清理旧的防火墙规则,若无旧规则则报错。此警告不影响 Docker 正常运行,可以忽略。 ## 4. Node.js LTS 版本 Node.js 20.20.1 是 Iron LTS 版本,官方支持至 2026 年 4 月,适合生产环境使用。LTS 版本特点: - 长期支持,稳定性高 - 安全更新持续提供 - 适合企业级应用 # 七、常见问题 ## 1. Docker 服务启动失败 ### 问题现象 执行 `systemctl start docker` 后服务未启动。 ### 排查步骤 查看服务状态详情: ```bash sudo systemctl status docker -l ``` 查看服务日志: ```bash sudo journalctl -u docker.service -n 50 --no-pager ``` ### 常见原因及解决 **原因 1**:端口被占用 ```bash sudo netstat -tulpn | grep :2375 ``` **原因 2**:存储空间不足 ```bash df -h ``` **原因 3**:权限问题 ```bash sudo chown -R root:root /var/run/docker.sock ``` ## 2. Node.js 安装失败 ### 问题现象 NodeSource 仓库添加失败或包无法下载。 ### 解决方法 检查网络连接: ```bash curl -I https://deb.nodesource.com ``` 手动添加 GPG 密钥: ```bash curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg ``` ## 3. docker 权限问题 ### 问题现象 每次使用 docker 命令都需要 sudo。 ### 解决方法 将当前用户添加到 docker 组: ```bash sudo usermod -aG docker $USER ``` 注销并重新登录生效,或执行: ```bash newgrp docker ``` 验证: ```bash docker ps ``` # 八、参考资料 1. [NodeSource 官方文档](https://github.com/nodesource/distributions) 2. [Docker 官方安装文档](https://docs.docker.com/engine/install/debian/) 3. [Docker Engine 架构说明](https://docs.docker.com/engine/architecture/) 最后修改:2026 年 03 月 09 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏