最近在龙芯 3B6000 平台上部署容器化应用时,发现系统自带的 Docker 版本较低,无法满足一些新特性(如 BuildKit 的增强功能、容器资源管理改进等)的需求。尤其是在尝试运行某些依赖新版本 Docker 的 CI/CD 工具链或容器镜像时,版本兼容性问题就凸显出来。本文将详细记录在龙芯 3B6000 架构的服务器上,通过 RPM 包手动安装高版本 Docker 29.5.1 的完整过程,涵盖从环境检查、依赖解决、安装配置到验证测试的全链路,并针对龙芯平台可能遇到的特殊问题提供解决方案。无论你是正在将应用向国产化平台迁移的开发者,还是负责龙芯服务器运维的工程师,这篇实战指南都能帮你绕过坑点,顺利完成部署。
1. 背景与核心概念
在深入安装步骤之前,我们有必要厘清几个关键概念,这有助于理解为什么在龙芯平台上安装 Docker 需要特别的步骤。
Docker 是什么?Docker 是一个开源的应用容器引擎,允许开发者将应用及其依赖打包到一个可移植的容器中。容器与传统虚拟机不同,它直接运行在宿主机的操作系统内核上,因此更加轻量、快速,并且能保证环境的一致性。Docker 29.5.1 是 Docker Engine 的一个较新版本,包含了对安全性、性能和管理功能的诸多改进。
RPM 包管理RPM(Red Hat Package Manager)是 Red Hat 系列 Linux 发行版(如 CentOS、Fedora、OpenAnolis、OpenEuler)标准的软件包管理格式。通过 RPM 包安装软件,可以自动处理依赖关系(尽管有时仍需手动解决),并方便地进行升级、查询和卸载。在无法直接使用yum或dnf从官方仓库安装特定版本时,手动下载并安装 RPM 包是常见做法。
龙芯 3B6000 平台龙芯 3B6000 是龙芯中科推出的新一代桌面和服务器处理器,采用 LoongArch 指令集架构。这意味着其软件生态与常见的 x86_64 或 ARM 架构不同。虽然主流 Linux 发行版已逐步提供对 LoongArch 的原生支持,但许多软件的预编译二进制包(尤其是较新版本)可能不会直接提供,或者需要从特定的镜像源获取。因此,在龙芯平台上安装软件,特别是像 Docker 这样复杂的系统服务,需要关注架构兼容性和依赖库的完整性。
为什么需要手动安装高版本 Docker?
- 系统仓库版本滞后:许多针对龙芯适配的 Linux 发行版,其默认软件仓库中的 Docker 版本可能停留在较旧的稳定版(如 20.10.x)。
- 新特性需求:Docker 29.x 引入了 BuildKit 作为默认构建器、改进的
docker compose集成、更细粒度的资源控制等功能,这些对于现代开发运维流程至关重要。 - 安全与合规:新版本通常包含重要的安全补丁和 CVE 修复。
本文将指导你完成在龙芯 3B6000 上获取并安装 Docker 29.5.1 的 RPM 包,并确保其稳定运行。
2. 环境准备与版本说明
在开始操作前,请确保你拥有一个龙芯 3B6000 服务器的操作权限(最好是 root 用户或具有 sudo 权限的账户)。
基础环境确认:
- 操作系统:本文以OpenAnolis OS 8.8(龙蜥)或统信 UOS 服务器版等基于龙芯 LoongArch 架构的 Linux 发行版为例。其他发行版如 OpenEuler for LoongArch 步骤类似。
- 内核版本:Docker 对内核版本有要求。运行以下命令检查:
输出应类似uname -r4.19.x或更高。建议使用 5.x 内核以获得更好的兼容性。 - 架构确认:
输出应为uname -mloongarch64,确认是龙芯架构。 - 已安装的旧版本 Docker:如果系统已安装旧版 Docker,建议先彻底卸载,避免冲突。
sudo systemctl stop docker sudo yum remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd - 安装必要工具:确保
wget、tar、gcc、make等基础工具已安装。sudo yum install -y wget tar gcc make
目标版本说明:
- Docker Engine: 29.5.1
- 架构: loongarch64 (龙芯)
- 包格式: RPM
- 依赖: containerd, runc, docker-cli-plugins 等。
重要提示:由于龙芯生态的软件仓库更新节奏不一,Docker 29.5.1 的官方预编译 RPM 包可能无法直接从主流镜像站获取。通常我们需要从龙芯社区维护的镜像源、发行版提供的测试仓库,或者通过源码编译来获得。本文将假设我们能够从可靠的龙芯软件源找到对应的 RPM 包。
3. 配置龙芯架构的软件源
为了更方便地解决依赖关系,我们首先需要配置一个包含较新软件包的龙芯架构软件源。这里以配置 OpenAnolis 的龙芯镜像源为例。
备份原有的 YUM 源配置文件:
sudo mkdir -p /etc/yum.repos.d/backup sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ 2>/dev/null || true创建新的 OpenAnolis LoongArch 源文件:
sudo tee /etc/yum.repos.d/anolis.repo << 'EOF' [anolis-os] name=Anolis OS - $basearch baseurl=https://mirrors.openanolis.cn/anolis/$releasever/OS/$basearch/ enabled=1 gpgcheck=1 gpgkey=https://mirrors.openanolis.cn/anolis/RPM-GPG-KEY-ANOLIS [anolis-updates] name=Anolis OS - Updates baseurl=https://mirrors.openanolis.cn/anolis/$releasever/updates/$basearch/ enabled=1 gpgcheck=1 gpgkey=https://mirrors.openanolis.cn/anolis/RPM-GPG-KEY-ANOLIS [anolis-plus] name=Anolis OS - Plus baseurl=https://mirrors.openanolis.cn/anolis/$releasever/Plus/$basearch/ enabled=1 gpgcheck=1 gpgkey=https://mirrors.openanolis.cn/anolis/RPM-GPG-KEY-ANOLIS EOF注意:
$releasever和$basearch变量会被 yum 自动替换。对于 Anolis 8.8,$basearch应为loongarch64。清理并重建 YUM 缓存:
sudo yum clean all sudo yum makecache测试源是否可用,尝试搜索 containerd(Docker 的核心依赖):
sudo yum search containerd如果能看到相关包,说明源配置成功。
4. 下载 Docker 29.5.1 RPM 包及其依赖
由于 Docker 29.5.1 可能不在默认的稳定仓库中,我们需要手动定位并下载 RPM 包。通常有以下几种途径:
- 途径A:从发行版的测试或Plus仓库安装(如果提供)。
- 途径B:从龙芯社区或第三方构建的镜像站下载。
- 途径C:从 Docker 官方 GitHub Release 的源码编译(最复杂)。
本文假设我们通过途径B,从一个已知的、为龙芯架构提供软件包的镜像站下载。在实际操作中,你需要根据当前可用的资源调整下载链接。
步骤:手动下载与依赖安装
安装
yum-utils工具包,它提供的yumdownloader命令可以帮助我们下载 RPM 包及其依赖。sudo yum install -y yum-utils尝试从配置的源中直接安装(如果仓库中有):
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin执行后,查看安装的版本
docker --version。如果版本低于 29.5.1,则继续下面的手动下载步骤。手动下载指定版本的 RPM 包。我们需要知道确切的包名。对于龙芯架构,包名通常包含
loongarch64后缀。例如:docker-ce-29.5.1-1.el8.loongarch64.rpmdocker-ce-cli-29.5.1-1.el8.loongarch64.rpmcontainerd.io-1.6.31-1.el8.loongarch64.rpmdocker-buildx-plugin-0.12.1-1.el8.loongarch64.rpmdocker-compose-plugin-2.24.3-1.el8.loongarch64.rpm
你可以使用
wget从可靠的 URL 下载。这里以示例 URL 格式展示(请注意,实际 URL 需要你根据当前可用的镜像站进行查找和替换):# 创建一个目录存放下载的包 DOWNLOAD_DIR=~/docker_rpms mkdir -p $DOWNLOAD_DIR cd $DOWNLOAD_DIR # 示例下载命令(URL需要替换为真实地址) # wget https://some-mirror.for.loongarch/docker/29.5.1/el8/loongarch64/stable/Packages/docker-ce-29.5.1-1.el8.loongarch64.rpm # wget https://some-mirror.for.loongarch/docker/29.5.1/el8/loongarch64/stable/Packages/docker-ce-cli-29.5.1-1.el8.loongarch64.rpm # wget https://some-mirror.for.loongarch/containerd/1.6.31/el8/loongarch64/stable/Packages/containerd.io-1.6.31-1.el8.loongarch64.rpm # ... 下载其他插件包 # 更实际的做法:如果镜像站配置了repo,可以用yumdownloader下载到当前目录而不安装 sudo yum install --downloadonly --downloaddir=$DOWNLOAD_DIR docker-ce-29.5.1 docker-ce-cli-29.5.1 containerd.io docker-buildx-plugin docker-compose-plugin如果
yumdownloader找不到指定版本,说明仓库中没有。你必须通过网络搜索或联系发行版维护者获取这些 RPM 包的下载链接。安装下载的 RPM 包。进入存放 RPM 包的目录,使用
rpm命令或yum localinstall进行安装。后者能更好地处理本地包的依赖。cd $DOWNLOAD_DIR sudo yum localinstall -y *.rpm如果遇到依赖错误(例如缺少
container-selinux、libcgroup等),yum localinstall会提示。你需要根据提示,使用sudo yum install先安装这些缺失的依赖包,然后再重新执行sudo yum localinstall -y *.rpm。
5. 配置与启动 Docker 服务
安装完成后,需要对 Docker 进行一些基本配置。
启动并设置开机自启:
sudo systemctl start docker sudo systemctl enable docker验证 Docker 服务状态和版本:
sudo systemctl status docker docker --version docker compose version # 验证插件是否安装成功此时,
docker --version应显示Docker version 29.5.1, build ...。(可选)配置 Docker 镜像加速器。国内访问 Docker Hub 可能较慢,建议配置国内镜像源。编辑或创建 Docker 守护进程配置文件:
sudo tee /etc/docker/daemon.json << 'EOF' { "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com" ], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOFregistry-mirrors: 镜像加速器地址,可以添加多个。exec-opts: 设置 cgroup 驱动为 systemd,与系统保持一致。log-driver和log-opts: 配置日志。storage-driver: 存储驱动,overlay2是推荐且常用的。
重新加载配置并重启 Docker:
sudo systemctl daemon-reload sudo systemctl restart docker
6. 运行测试与基本使用
安装配置完成后,必须进行测试以确保 Docker 正常工作。
运行经典测试容器:
sudo docker run --rm hello-world如果一切正常,你将看到来自 Docker 的 “Hello from Docker!” 欢迎信息。这证明 Docker 守护进程运行正常,并能从网络拉取镜像、创建并运行容器。
测试更复杂的操作(例如运行一个 Nginx 容器):
# 拉取 nginx 镜像(注意:需要龙芯架构可用的镜像,或多架构镜像) sudo docker pull nginx:alpine # 运行一个临时容器,映射端口 sudo docker run --rm -d -p 8080:80 --name my-nginx nginx:alpine # 检查容器运行状态 sudo docker ps # 访问测试 (在另一终端或本机) curl http://localhost:8080 # 停止容器 sudo docker stop my-nginx重要提示:并非所有 x86_64 或 ARM 的 Docker 镜像都有对应的龙芯(LoongArch64)版本。你需要寻找明确支持
linux/loong64平台的镜像。例如,许多基础镜像(如debian、alpine)和流行软件(如nginx、redis)的官方镜像已提供多架构支持,包含loong64。使用docker pull时,Docker 会自动选择匹配当前主机架构的镜像标签。测试
docker compose(如果已安装插件):mkdir ~/compose-test && cd ~/compose-test tee docker-compose.yml << 'EOF' version: '3.8' services: web: image: nginx:alpine ports: - "8080:80" redis: image: redis:alpine EOF sudo docker compose up -d sudo docker compose ps sudo docker compose down
7. 常见问题与排查思路
在龙芯平台上安装高版本 Docker,你可能会遇到一些特有或常见的问题。
| 问题现象 | 可能原因 | 排查与解决思路 |
|---|---|---|
sudo yum install docker-ce提示“没有可用软件包” | 1. 软件源未正确配置为 loongarch64。 2. 仓库中确实没有该版本的 Docker。 | 1. 检查/etc/yum.repos.d/下的 repo 文件,确认baseurl指向正确的龙芯架构镜像路径。2. 使用 yum search docker-ce查看仓库有哪些版本。3. 考虑手动下载 RPM 包安装。 |
sudo yum localinstall *.rpm失败,提示依赖错误(如libseccomp >= 2.4) | 系统自带的依赖库版本过低,不满足 Docker 29.5.1 的要求。 | 1. 根据错误信息,尝试从龙芯软件源安装更高版本的依赖包(如sudo yum install libseccomp-2.5.x)。2. 如果源中没有,可能需要手动编译安装该依赖,但这会提高复杂度。 3. 考虑寻找针对当前系统版本(如 el8)构建的、依赖要求更低的 Docker RPM 包。 |
sudo systemctl start docker失败,查看日志journalctl -xe -u docker发现错误 | 1. 存储驱动不兼容(如overlay2所需的内核版本或文件系统不支持)。2. 与现有容器运行时(如旧版 containerd)冲突。 3. SELinux 策略限制。 | 1. 检查内核版本uname -r和文件系统类型(df -T /var/lib/docker)。2. 确保旧版 Docker/containerd 已彻底卸载(见环境准备步骤)。 3. 尝试临时禁用 SELinux setenforce 0后启动 Docker,如果成功,则需要配置正确的 SELinux 策略或将其设置为宽容模式(生产环境需谨慎)。4. 检查 /etc/docker/daemon.json配置是否有语法错误。 |
docker run hello-world失败,提示“exec format error” | 拉取的hello-world镜像架构与主机不匹配(可能是 x86_64 版本)。 | 1. 显式指定龙芯架构的镜像标签,如docker pull --platform linux/loong64 hello-world。2. 确认镜像是否支持多架构: docker manifest inspect hello-world。3. 使用已知支持 loong64的镜像进行测试,如docker pull cr.loongnix.cn/library/alpine:latest并运行。 |
| Docker 命令执行慢,或拉取镜像超时 | 网络连接问题,或默认 Docker Hub 镜像源在国内访问不畅。 | 1. 按照第5步配置国内镜像加速器。 2. 检查防火墙设置,确保能访问外部网络和镜像仓库端口(通常是 HTTPS 443)。 3. 对于龙芯生态,可以尝试使用 cr.loongnix.cn等国内龙芯镜像站。 |
docker compose命令未找到或报错 | docker-compose-pluginRPM 包未成功安装,或者安装的是独立的docker-compose(Python 版本)。 | 1. 确认已安装docker-compose-plugin包:`rpm -qa |
8. 最佳实践与工程建议
在龙芯生产环境中部署 Docker,除了完成安装,还需遵循一些最佳实践以确保稳定性、安全性和可维护性。
版本与源管理
- 固定版本:在生产环境中,避免使用
latest标签或频繁升级到最新版本。应明确记录所使用的 Docker Engine、containerd 以及所有插件的具体版本号(如本文的 29.5.1),便于环境一致性管理和故障回溯。 - 使用内部镜像仓库:对于企业级应用,强烈建议搭建私有的 Docker 镜像仓库(如 Harbor),并将所有基础镜像和业务镜像推送至内网仓库。这可以加速部署,避免因外网波动导致部署失败,并增强安全性。
- 维护专属 RPM 仓库:如果有多台龙芯服务器需要部署相同版本的 Docker,可以考虑在内部搭建一个 YUM/DNF 仓库,将下载好的 Docker 29.5.1 RPM 包及其依赖放入其中。这样其他服务器可以通过内网源快速、一致地安装。
- 固定版本:在生产环境中,避免使用
配置优化
- 日志轮转:在
/etc/docker/daemon.json中配置的max-size和max-file可以有效防止容器日志占满磁盘。 - 存储路径:默认 Docker 数据存储在
/var/lib/docker。如果该分区空间不足,可以考虑通过>
- 日志轮转:在