龙芯3B6000安装Docker 29.5.1:LoongArch架构软件生态与实战指南
2026/7/25 4:24:06 网站建设 项目流程

最近在龙芯 3B6000 上折腾 Docker,发现一个挺有意思的现象:很多人拿到新硬件、新系统,第一反应就是“装最新版”。Docker 29.5.1 作为 29.x 系列的一个稳定版本,功能新、修复多,吸引力确实大。但真要在龙芯这样的 LoongArch 架构上把它跑起来,你会发现,从官方仓库直接yum install docker-ce或者apt install docker.io这条路,大概率走不通。

这不是因为龙芯“不行”,而是整个开源软件生态里,一个经典但容易被忽略的环节在起作用:软件包的构建和分发流水线。主流的 Docker 官方仓库,其 RPM 或 DEB 包通常是针对 x86_64、ARM64(aarch64)等主流架构预先编译好的。对于 LoongArch 这类相对较新的架构,官方构建流水线可能还没来得及覆盖,或者社区维护的版本尚未进入稳定仓库。

所以,“龙芯 3B6000 安装高版本 rpm Docker 29.5.1”这个需求,表面看是个安装问题,内核其实是一个“如何在非主流架构上获取并安装预编译软件包”的工程问题。它考验的不是你对 Docker 命令有多熟,而是你能否理解软件分发的链条,并找到那个适合当前架构的“入口点”。

1. 先别急着yum install:理解龙芯平台的软件生态现状

在 x86 机器上,安装 Docker 几乎总是成功的。你添加 Docker 的官方仓库,更新缓存,然后安装docker-cedocker-ce-cli等包,一切水到渠成。这个流程太顺了,以至于我们很少去思考背后发生了什么:这些*.rpm文件是从哪里来的?

对于龙芯 3B6000(LoongArch 架构),情况有些不同:

  1. 架构标识:LoongArch 架构在 Linux 系统中的标识通常是loongarch64。这意味着,当你执行uname -m,看到的应该是loongarch64,而不是x86_64aarch64
  2. 官方仓库覆盖:Docker 官方(download.docker.com)以及各大 Linux 发行版(如 CentOS、Fedora、Ubuntu)的官方仓库,其软件包构建矩阵(build matrix)首要覆盖的是用户量最大的架构。LoongArch 作为较新的自主架构,通常需要社区或发行版维护者额外投入资源进行适配和构建。
  3. 依赖链:Docker Engine 不是一个孤立的二进制文件。它依赖containerdrunclibseccomp等一系列底层组件。这些组件同样需要针对 LoongArch 架构编译。如果只解决了docker-ce的包,但它的依赖包没有对应架构的版本,安装依然会失败。

因此,在龙芯上安装高版本 Docker 的第一步,不是找命令,而是确认你的软件源

常见的路径有以下几种:

  • 发行版提供:最理想的状况。例如,某些针对龙芯优化的 Linux 发行版(如 UOS、Loongnix)的软件仓库中,可能已经提供了较新版本的 Docker 包。你需要检查发行版的仓库配置。
  • 第三方社区仓库:一些活跃的社区或组织会维护针对 LoongArch 的软件包仓库。例如,Arch Linux 的 AUR 可能有维护者提交的 PKGBUILD,但你需要确认其针对的是 LoongArch 还是旧的 MIPS 架构。对于 RPM 系(如 Fedora、OpenEuler),可能有专门的loongarch64仓库分支。
  • 手动编译:这是最终的“万能”方案,但也是复杂度最高的。你需要从 Docker 的 GitHub 仓库(moby/moby)获取源码,在龙芯机器上搭建完整的 Go 语言等编译环境,处理可能存在的架构相关代码补丁,然后进行编译。这通常涉及docker-cecontainerdrunc等多个项目,耗时且对环境要求高。
  • 寻找预编译的 RPM:这也是标题中“rpm Docker 29.5.1”所暗示的路径。即,有人已经为 LoongArch 编译好了 Docker 29.5.1 的 RPM 包,你需要找到它并手动安装。

我们的目标,是优先寻找预编译的 RPM 包。如果找不到,再考虑从源码编译。直接使用 x86/ARM 的仓库,注定会失败。

2. 寻找 LoongArch 架构的 Docker RPM:策略与实战

既然不能直接从主流仓库安装,我们就得主动去“找”包。这个寻找过程,本身就是一个标准的开源软件供应链追溯练习。

2.1 第一步:确定你的基础系统

龙芯 3B6000 上可能运行多种 Linux 发行版。不同的发行版,其包管理格式(RPM vs DEB)、库依赖、文件系统布局都不同。你必须先明确这一点。

# 查看系统信息 cat /etc/os-release # 查看内核架构 uname -m

假设你使用的是某个基于 Fedora/CentOS/RHEL 的发行版(RPM 系),那么我们的目标就是loongarch64架构的.rpm文件。

2.2 第二步:搜索可靠的软件源

这是最关键的一步。你需要寻找为 LoongArch 提供软件包的仓库。

  1. 检查系统现有仓库:首先查看系统已配置的 YUM/DNF 仓库列表。

    yum repolist all # 或 dnf repolist all

    仔细查看输出中是否有包含loongarch64字样的仓库,并且仓库中是否启用了(enabled)。有时,发行版会提供测试(testing)或开发(devel)仓库,里面可能有较新的软件包。

  2. 探索社区仓库

    • OpenEuler:华为的 OpenEuler 发行版对 LoongArch 有较好的支持。可以访问 OpenEuler 的镜像站,寻找对应版本的loongarch64仓库。例如,在/etc/yum.repos.d/下添加 OpenEuler 的 repo 文件。
    • Fedora EPEL for LoongArch:Fedora 的 Extra Packages for Enterprise Linux (EPEL) 有时会有社区维护的 LoongArch 分支。但这需要你确认其与你的基础系统是否兼容。
    • 发行版特定社区:例如,针对 Fedora 的rpmfusion等第三方仓库,查看其是否支持 LoongArch。
  3. 使用包搜索引擎

    • 访问诸如 pkgs.org 或 rpmfind.net 等网站。
    • 搜索docker-cedocker,然后在架构(Architecture)过滤条件中选择loongarch64
    • 注意查看包对应的发行版(Fedora, openEuler, CentOS等)和版本号。找到 Docker 29.5.1 或相近版本。
  4. 直接访问构建系统:一些开源项目的构建结果会直接托管在公开的存储服务上。例如,Docker 的 CI/CD 系统可能会为每次提交或标签生成多架构的构建产物。你可以尝试在 Docker 的 GitHub Actions 页面或类似 GitLab CI 的制品(Artifacts)中寻找。但这通常需要你对项目的构建流程比较熟悉。

2.3 第三步:手动下载与安装 RPM

假设我们通过上述方法,在某个镜像站找到了以下 RPM 包(以 Docker 29.5.1 为例,实际文件名可能不同):

  • docker-ce-29.5.1-1.el9.loongarch64.rpm
  • docker-ce-cli-29.5.1-1.el9.loongarch64.rpm
  • containerd.io-2.2.5-1.el9.loongarch64.rpm(注意:版本需与 Docker 29.5.1 匹配,从搜索材料看,29.5.1 对应 containerd v2.2.4,29.5.3 对应 v2.2.5)

安装步骤:

  1. 下载 RPM 包:使用wgetcurl将找到的包下载到本地目录。

    wget https://example-mirror.com/path/to/docker-ce-29.5.1-1.el9.loongarch64.rpm wget https://example-mirror.com/path/to/docker-ce-cli-29.5.1-1.el9.loongarch64.rpm wget https://example-mirror.com/path/to/containerd.io-2.2.5-1.el9.loongarch64.rpm
  2. 处理依赖:手动安装 RPM 的最大挑战是依赖关系。你可以尝试使用yum localinstalldnf local install,它们会尝试从已配置的仓库中解决依赖。

    sudo yum localinstall ./*.rpm # 或 sudo dnf local install ./*.rpm

    如果提示缺少依赖(如libcgroup,container-selinux等),你需要同样去找到这些依赖包的loongarch64版本,并逐一下载安装。这是一个可能比较繁琐的过程。

  3. 强制安装(不推荐):如果依赖关系简单,或者你确认系统已满足依赖,可以使用rpm -ivh强制安装,但可能破坏系统稳定性。

    sudo rpm -ivh --nodeps docker-ce-29.5.1-1.el9.loongarch64.rpm

重要提醒:从非官方、未经验证的源安装软件包存在安全风险。请尽量选择可信的社区或发行版官方镜像站。

3. 如果找不到 RPM:从源码编译的务实路径

如果经过多方搜寻,确实找不到 Docker 29.5.1 的 LoongArch RPM 包,那么从源码编译就成了唯一的选择。这听起来很复杂,但将其分解为步骤,是可以实现的。

核心思路:Docker 引擎(moby/moby)及其相关组件(containerd, runc)都是用 Go 语言编写的。Go 语言具有优秀的跨平台编译能力。我们需要在龙芯机器上,搭建 Go 环境,获取源码,并执行针对loongarch64的编译。

3.1 环境准备

  1. 安装 Go:确保系统安装了足够新版本的 Go。Docker 29.x 可能需要 Go 1.24 或更高版本(根据搜索材料中 v29.0.0 的更新说明)。从 Go 官网下载linux-loong64的安装包并安装。

    wget https://go.dev/dl/go1.24.0.linux-loong64.tar.gz sudo tar -C /usr/local -xzf go1.24.0.linux-loong64.tar.gz echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc source ~/.bashrc go version
  2. 安装基础开发工具

    sudo yum groupinstall "Development Tools" sudo yum install git make gcc libseccomp-devel

3.2 编译 runc 和 containerd

Docker 依赖这两个底层组件。通常需要先编译它们。

  1. 编译 runc

    git clone https://github.com/opencontainers/runc.git cd runc # 切换到与 Docker 29.5.1 兼容的版本,例如 v1.3.6 (根据搜索材料,29.6.0 使用了 runc v1.3.6,29.5.1 可能使用 v1.3.5) git checkout v1.3.5 make BUILDTAGS='seccomp selinux' sudo make install
  2. 编译 containerd

    git clone https://github.com/containerd/containerd.git cd containerd # 切换到与 Docker 29.5.1 兼容的版本,例如 v2.2.4 (搜索材料显示 29.5.1 对应此版本) git checkout v2.2.4 make sudo make install

3.3 编译 Docker 引擎 (moby)

这是最核心的一步。

git clone https://github.com/moby/moby.git cd moby # 切换到 v29.5.1 标签 git checkout v29.5.1 # 使用 Makefile 进行编译。`DOCKER_BUILD_PKGS` 指定要构建的包,这里我们构建静态二进制文件。 # 这个过程会下载很多依赖,耗时较长。 make binary

编译成功后,产物会在./bundles/binary-daemon/目录下。主要我们需要dockerddocker这两个二进制文件。

3.4 安装与配置

  1. 复制二进制文件

    sudo cp -p ./bundles/binary-daemon/dockerd /usr/local/bin/ sudo cp -p ./bundles/binary-daemon/docker /usr/local/bin/
  2. 创建 systemd 服务文件:Docker 通常作为服务运行。你可以从官方 RPM 包中提取,或参考其他架构的 systemd unit 文件编写。一个简单的docker.service示例如下(需放置于/etc/systemd/system/):

    [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service containerd.service Wants=network-online.target Requires=containerd.service [Service] Type=notify ExecStart=/usr/local/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0 RestartSec=2 Restart=always StartLimitBurst=3 StartLimitInterval=60s LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TasksMax=infinity Delegate=yes KillMode=process [Install] WantedBy=multi-user.target
  3. 启动 Docker 服务

    sudo systemctl daemon-reload sudo systemctl enable docker sudo systemctl start docker sudo docker version

4. 安装后的关键验证与避坑指南

无论通过 RPM 还是源码编译安装成功,都不意味着万事大吉。在龙芯这样的非主流架构上,需要做更细致的验证。

4.1 基础功能验证

  1. 版本与信息:首先运行docker versiondocker info,确认客户端和服务端版本都是 29.5.1,并且架构显示为linux/loong64(Docker 使用的 GOARCH 名称可能是loong64)。
  2. 运行一个测试容器:这是最关键的测试。不要一上来就跑复杂应用。
    sudo docker run --rm hello-world
    如果这个命令失败,问题可能出在:
    • 镜像架构不匹配hello-world镜像可能没有linux/loong64的版本。你需要寻找支持多架构的镜像,或者显式指定平台(如果 Docker 支持)。对于 LoongArch,可用的基础镜像较少,你可能需要自己构建。
    • 内核功能缺失:检查内核是否启用了必要的特性,如cgroupsnamespacesoverlayfs等。运行docker info会输出一些警告信息。
    • SELinux/AppArmor:如果系统启用了 SELinux 或 AppArmor,可能需要调整策略。

4.2 LoongArch 特定注意事项

  1. 镜像可用性:这是最大的生态瓶颈。Docker Hub 上绝大多数镜像只有linux/amd64linux/arm64。你需要:

    • 寻找明确支持linux/loong64的镜像(如一些国产基础镜像)。
    • 学习使用 Dockerfile 在龙芯机器上自己构建镜像。
    • 使用docker buildx尝试构建多架构镜像,但这需要配置构建器。
  2. 内核版本与配置:确保你的内核版本足够新,以支持 Docker 所需的所有功能。特别是对于高版本 Docker,一些新特性(如cgroup v2time namespaces等)需要内核支持。搜索材料中 Docker 29.5.0 提到了“默认启用私有时间命名空间”,这需要较新的内核。

  3. 存储驱动:默认的overlay2存储驱动需要内核支持。使用docker info检查Storage Driver是否正常。如果不行,可以尝试在/etc/docker/daemon.json中配置"storage-driver": "vfs",但性能较差。

  4. 网络问题:在非主流架构上,网络插件(如bridge,macvlan)的底层实现可能遇到问题。如果容器无法联网,检查iptables/nftables规则,以及ip forwarding是否开启。

    sudo sysctl net.ipv4.ip_forward # 如果为0,则启用 sudo sysctl -w net.ipv4.ip_forward=1 # 使其永久生效,编辑 /etc/sysctl.conf

4.3 长期维护思考

  1. 升级路径:手动安装 RPM 或源码编译,都意味着你脱离了系统的包管理器(yum/dnf)的自动更新轨道。下次 Docker 发布安全更新(如搜索材料中频繁出现的 CVE 修复),你需要重复整个寻找或编译流程。这是一个重要的维护成本。
  2. 依赖管理:手动安装的依赖包不会自动更新。你需要自己关注containerdrunc等组件的安全更新。
  3. 文档与社区:记录下你本次成功安装的所有步骤、使用的软件源、遇到的错误及解决方法。这对于你个人复盘和帮助其他龙芯开发者非常有价值。考虑将你的经验分享到相关的开源社区或论坛。

5. 总结:在龙芯上安装高版本 Docker,到底在解决什么问题?

回过头看,“安装 Docker”这个动作,在 x86 生态下是一个简单的“消费”行为,而在龙芯生态下,则更像一次“参与建设”的行为。

它迫使你去关注软件供应链的完整链条:从源码、到针对特定架构的编译、到打包成 RPM、再到仓库分发、最后到用户安装。在主流架构上,这个链条由庞大的社区和商业公司维护,对用户透明。在 LoongArch 这样的新架构上,这个链条可能在某些环节是断裂的。

因此,在龙芯 3B6000 上成功安装 Docker 29.5.1,其价值远不止于“能用 Docker 了”。它意味着:

  1. 你验证了该版本 Docker 在 LoongArch 架构上的基础兼容性
  2. 你为后续的开发者探索了一条可行的软件获取路径,无论是通过你找到的 RPM 仓库,还是你总结的编译指南。
  3. 你意识到了生态建设的重要性。一个架构的繁荣,离不开像你这样愿意去“填坑”、去把上游软件“搬”过来的人。

所以,下次当你再遇到类似“在某某架构上安装某某软件”的问题时,思路可以更清晰:先查官方和主流社区仓库,再找针对该架构的第三方仓库,最后考虑源码编译。每一步,都是在为这个架构的软件生态添砖加瓦。而每一次成功的安装,都是对“自主生态”这个宏大命题的一次具体而微的实践。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询