
1. 为什么要在龙芯 3B6000 上装 Docker 29.5.1如果你手头有龙芯 3B6000 的机器不管是开发机、测试机还是生产环境的一部分想在上面跑容器那 Docker 几乎是绕不开的选择。但龙芯平台LoongArch 架构和常见的 x86_64 或 ARM64 环境不太一样官方 Docker 仓库通常不直接提供预编译的二进制包。所以标题里的“安装高版本 rpm Docker 29.5.1” 核心要解决的就是在龙芯 3B6000 上如何获取、安装并成功运行一个较新且稳定的 Docker Engine 版本。Docker 29.x 系列相比之前的 20.x、23.x 有不少变化比如默认启用了 containerd 镜像存储后端、API 版本升级、移除了一些旧特性等。29.5.1 是一个修复了多个安全漏洞的版本对于生产环境来说选择它比直接用最新的 29.6.x 可能更稳妥一些毕竟新版本可能引入未知的兼容性问题。在龙芯上做这件事关键点不在于 Docker 命令怎么用而在于前置的依赖解决、包获取和安装后的验证。很多人卡在第一步找不到包或者安装后dockerd起不来。下面我就按实际操作的顺序把从准备到验证的完整流程拆开讲清楚。2. 安装前的环境确认与依赖准备在动手下载任何 rpm 包之前先花几分钟把系统环境理清楚能避免一大半的“玄学”问题。2.1 确认系统版本和架构首先连上你的龙芯 3B6000 机器打开终端运行以下命令uname -m cat /etc/os-release对于龙芯 3B6000uname -m应该会返回loongarch64。这是关键意味着你要找的是loongarch64架构的 rpm 包不是x86_64、aarch64或者mips64旧款龙芯3A是mips64。/etc/os-release会告诉你具体的发行版和版本号比如是Loongnix、UOS、Kylin还是基于 Fedora/CentOS 的衍生版。不同的发行版其基础库、软件包命名和依赖关系可能有细微差别。我这次演示的环境是 Loongnix 20基于 Fedora但思路是通用的。2.2 处理关键系统依赖Docker 29.5.1 对系统内核和基础库有要求。先检查并安装必要的依赖# 1. 更新系统包缓存如果是yum/dnf sudo dnf makecache # 或 sudo yum makecache # 2. 安装基础依赖 sudo dnf install -y yum-utils device-mapper-persistent-data lvm2 # 3. 确认关键库是否存在例如 libseccomp rpm -qa | grep libseccomp # 如果没安装则安装 sudo dnf install -y libseccomp特别注意 libseccomp 版本Docker 对 libseccomp 有最低版本要求通常 2.3。可以用rpm -q libseccomp --info查看版本。如果系统自带的版本太低可能需要从源码编译升级这会是一个比较麻烦的依赖问题。2.3 配置软件源如果需要如果你的系统没有配置合适的软件源可能连containerd.io、docker-ce-cli这些基础依赖都找不到。对于龙芯平台通常需要添加针对loongarch64架构的 EPEL 源或厂商提供的扩展源。例如在 Loongnix 上可以检查/etc/yum.repos.d/目录下的 repo 文件。如果缺少可能需要联系系统提供商获取正确的源配置。这一步没有通用命令完全取决于你的具体系统。3. 获取与安装 Docker 29.5.1 rpm 包这是最核心的一步。官方 Docker 仓库不提供 loongarch64 的包所以通常有几种途径3.1 途径一从系统厂商或社区仓库获取这是最推荐、最稳妥的方式。许多针对龙芯的发行版如 Loongnix、OpenKylin for LoongArch的软件仓库里可能已经打包好了 Docker。你可以直接用包管理器搜索dnf search docker-ce # 或 yum search docker-ce如果找到了类似docker-ce-29.5.1-1.el9.loongarch64这样的包直接安装即可sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin但请注意仓库里的版本未必是 29.5.1可能是 24.x 或其他版本。如果版本符合你的要求这是最省事的方法。3.2 途径二寻找第三方构建的 rpm 包如果系统仓库里没有或者版本太旧就需要去网上找第三方构建的包。这里需要非常小心来源的安全性。搜索关键词可以在搜索引擎或开源社区如 Gitee、GitHub搜索 “docker-ce loongarch64 rpm”、“龙芯 docker rpm 包”。核对信息找到包后不要急着下。先看发布者、发布时间、下载量、是否有签名或哈希校验值。优先选择知名社区、厂商或活跃开发者发布的包。下载与检查假设你找到了一个名为docker-ce-29.5.1-1.loongarch64.rpm的包及其配套的docker-ce-cli、containerd.io包。# 下载包示例实际URL需替换 wget https://example.com/packages/loongarch64/docker-ce-29.5.1-1.loongarch64.rpm wget https://example.com/packages/loongarch64/docker-ce-cli-29.5.1-1.loongarch64.rpm wget https://example.com/packages/loongarch64/containerd.io-2.2.4-1.loongarch64.rpm # 安装前强烈建议检查包的依赖关系 rpm -qpR docker-ce-29.5.1-1.loongarch64.rpm这个命令会列出这个 rpm 包依赖哪些其他的库或包。你需要确保你的系统能满足这些依赖。常见的依赖如systemd,libseccomp 2.3,container-selinux如果开启了 SELinux等。3.3 途径三从源码编译最复杂但最可控如果找不到现成的 rpm 包或者对现有包不放心最后的手段是自己从源码编译。这需要完整的开发环境和较长的时间。准备编译环境sudo dnf groupinstall -y Development Tools sudo dnf install -y git go make gcc libseccomp-devel systemd-devel获取 Docker 源码 Docker 的源码在github.com/moby/moby。你需要切换到v29.5.1这个 tag。git clone https://github.com/moby/moby.git cd moby git checkout v29.5.1编译 Docker 使用 Go 语言编写编译相对简单但耗时较长且对 Go 版本有要求29.5.1 需要 Go 1.26。你需要先安装合适版本的 Go然后设置GOARCHloong64注意Go 语言对龙芯的标识是loong64不是loongarch64。export GOARCHloong64 export GOOSlinux # 假设你的Go安装在 /usr/local/go export PATH$PATH:/usr/local/go/bin # 在 moby 源码目录下执行编译 make binary编译成功后产物在./bundles/binary-daemon/目录下包括dockerd、docker等二进制文件。打包成 rpm可选但推荐 手动编译的二进制文件管理起来不如 rpm 方便。你可以参考 Docker 官方或发行版的.spec文件自己制作一个 rpm 包或者直接将二进制文件拷贝到系统路径如/usr/local/bin并手动配置 systemd 服务单元。但这会失去包管理的依赖检查和自动更新能力。我个人的建议是优先尝试途径一系统仓库其次是途径二可信的第三方包。途径三源码编译是最后的保底方案适合有定制化需求或深度集成的场景。4. 安装步骤与关键配置假设你已经通过途径一或二获得了docker-ce、docker-ce-cli和containerd.io的 rpm 包。接下来进行安装。4.1 执行安装命令# 进入存放下载的rpm包的目录 cd /path/to/your/rpm/files # 使用 rpm 或 yum/dnf 本地安装 sudo rpm -ivh containerd.io-*.rpm sudo rpm -ivh docker-ce-cli-*.rpm sudo rpm -ivh docker-ce-*.rpm # 或者使用 yum/dnf 本地安装可以自动解决依赖如果仓库里有 # sudo dnf install -y ./*.rpm安装过程中注意观察终端输出看是否有依赖缺失的报错。如果有需要根据错误信息手动安装缺失的依赖包。4.2 安装后的基础配置安装完成后不要急着启动服务。先做几个关键配置配置 Docker 守护进程daemon.json Docker 29.x 默认使用 containerd 作为镜像存储后端这通常没问题。但我们可以创建一个配置文件来调整一些默认行为比如镜像加速。sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 }, storage-driver: overlay2, registry-mirrors: [ https://docker.mirrors.ustc.edu.cn, https://hub-mirror.c.163.com ] } EOFnative.cgroupdriversystemd如果你的系统使用 systemd 管理 cgroup建议设置此项。storage-driver在龙芯平台上overlay2通常是兼容性最好的存储驱动。registry-mirrors添加国内镜像加速器可以极大提升拉取镜像的速度。可选禁用 SELinux 如果系统启用了 SELinux而你对它不熟悉在初期调试时可以先临时禁用避免权限问题干扰判断。# 查看SELinux状态 getenforce # 如果返回 Enforcing可以临时设置为 Permissive sudo setenforce 0 # 要永久禁用需修改 /etc/selinux/config将 SELINUXenforcing 改为 SELINUXdisabled然后重启。注意生产环境请根据安全策略谨慎处理 SELinux。4.3 启动 Docker 服务并设置开机自启# 重新加载 systemd 配置使新的服务单元生效 sudo systemctl daemon-reload # 启动 docker 服务 sudo systemctl start docker # 设置开机自启 sudo systemctl enable docker # 检查服务状态 sudo systemctl status docker如果status命令显示active (running)恭喜你Docker 服务已经成功启动。如果失败会显示具体的错误信息这是下一步排查的关键。5. 验证安装与基础功能测试服务跑起来只是第一步接下来要验证 Docker 的核心功能是否正常。5.1 验证客户端和服务端版本docker version这个命令会输出客户端Client和服务端Server的版本信息。重点关注Server部分确保Version是29.5.1并且OS/Arch显示为linux/loong64。如果Server部分显示Cannot connect to the Docker daemon说明 dockerd 服务没有正常启动或当前用户没有权限。5.2 运行一个最简单的测试容器我们不用hello-world镜像因为它可能没有 loong64 架构的版本而是用一个小巧的、多架构支持好的busybox镜像来测试。# 拉取 busybox 镜像Docker会自动选择适合 loong64 的版本如果存在 docker pull busybox # 运行一个交互式命令 docker run --rm busybox echo Hello from LoongArch64 Docker!如果命令成功执行并打印出 “Hello from LoongArch64 Docker!”说明 Docker 最基本的拉取镜像、创建容器、运行命令的功能都正常。5.3 测试更复杂的功能构建镜像Docker 的核心价值之一是镜像构建。我们来测试一下docker build功能是否正常。创建一个简单的Dockerfilemkdir ~/docker-test cd ~/docker-test cat Dockerfile EOF FROM alpine:latest RUN echo 构建于龙芯平台 /hello.txt CMD cat /hello.txt EOF尝试构建镜像docker build -t loong-test:latest .这里有个关键点alpine:latest镜像是否有linux/loong64的版本如果没有构建会失败报错“no matching manifest for linux/loong64”。这时你需要找一个基础镜像支持 loong64比如debian:bookworm-slim、ubuntu:jammy或者龙芯社区维护的基础镜像。运行刚构建的镜像docker run --rm loong-test:latest如果成功输出“构建于龙芯平台”说明整个 Docker 的构建和运行流水线在你的龙芯机器上完全打通了。6. 常见问题排查与解决思路在龙芯平台上安装 Docker遇到问题很正常。下面是一些典型问题的排查思路。6.1 问题dockerd服务启动失败现象sudo systemctl status docker显示failed或者journalctl -u docker --no-pager -n 50查看日志有错误。排查步骤检查依赖首先看日志里有没有明显的“找不到动态库”cannot open shared object file的错误。这通常是因为 rpm 包依赖的某个库的版本与系统不符。需要手动安装或更新对应库。检查存储驱动Docker 29.x 默认可能尝试使用containerd镜像存储。如果之前系统有旧版本 Docker 数据可能会有冲突。可以尝试在/etc/docker/daemon.json中显式指定storage-driver: overlay2然后删除/var/lib/docker注意这会删除所有现有镜像和容器再重启服务。检查内核参数运行sudo dockerd --validate可以检查一些内核配置。常见需要开启的内核模块和参数包括overlay模块lsmod | grep overlaybr_netfilter模块lsmod | grep br_netfilternet.bridge.bridge-nf-call-iptables 1等。 如果缺失需要加载模块或修改sysctl.conf。检查 cgroup确保系统使用 cgroup v2现代发行版默认或正确配置了 cgroup v1。Docker 29.x 对 cgroup v1 是 deprecated 状态但还能用。6.2 问题docker pull失败报错“no matching manifest”现象拉取镜像时提示no matching manifest for linux/loong64 in the manifest list entries。原因与解决Docker 镜像是一个多架构的清单manifest list。如果该镜像的维护者没有为linux/loong64架构编译并推送镜像你就拉取不到。这是龙芯平台目前最大的生态问题。解决思路寻找替代镜像搜索支持linux/loong64的镜像。一些基础镜像如debian,ubuntu,alpine和大型项目如nginx,redis的官方镜像可能已经支持。可以用docker manifest inspect IMAGE_NAME:TAG命令需要开启实验性功能查看该镜像支持哪些架构。自己构建如果找不到唯一的办法就是获取该软件的源码在你的龙芯机器上编写Dockerfile进行编译和构建。这就是为什么在龙芯上玩 Docker很多时候等于“从源码开始构建整个生态”。使用--platform参数不推荐docker pull --platform linux/amd64 IMAGE_NAME可以强制拉取 amd64 的镜像然后在龙芯上通过 QEMU 用户态模拟运行。但这会带来巨大的性能损失和兼容性问题仅适用于测试不适合生产。6.3 问题容器内网络异常或端口无法访问现象容器能启动但无法连接外部网络或者宿主机的端口映射不生效。排查步骤检查防火墙龙芯发行版可能默认启用firewalld或iptables。Docker 会操作 iptables/nftables 规则来管理网络。如果防火墙规则冲突可能导致网络不通。可以尝试临时关闭防火墙测试sudo systemctl stop firewalld sudo systemctl stop iptables # 或者如果使用 nftables sudo systemctl stop nftables注意生产环境应在防火墙中为 Docker 开放相应规则而不是直接关闭。检查内核转发确保 IP 转发已开启。cat /proc/sys/net/ipv4/ip_forward # 应该返回 1。如果是0则临时开启 sudo sysctl -w net.ipv4.ip_forward1 # 永久生效编辑 /etc/sysctl.conf添加 net.ipv4.ip_forward 1检查 Docker 网络运行docker network ls和docker network inspect bridge查看默认的bridge网络配置是否正确。6.4 问题权限不足需要 sudo现象每次运行docker命令都需要加sudo。解决将当前用户加入docker用户组。sudo groupadd docker # 如果 docker 组不存在 sudo usermod -aG docker $USER重要执行后你需要完全注销并重新登录或者新开一个终端用户组变更才会生效。之后就可以不用sudo直接运行docker命令了。7. 生产环境考量与后续建议如果你的目标是在龙芯 3B6000 上部署生产服务那么安装成功只是起点。镜像来源管理建立内部私有镜像仓库如 Harbor是几乎必须的。将你自己在龙芯上构建好的、经过测试的镜像推送到私有仓库供集群内其他龙芯节点拉取。避免每次都从零开始构建。监控与日志确保 Docker 守护进程和容器的日志被正确收集如配置log-driver为json-file并设置轮转或直接发送到syslog/journald。使用docker stats或cAdvisor、Prometheus等工具监控容器资源使用情况。安全加固非 root 用户运行考虑使用 Rootless Docker 模式但这在龙芯平台上的兼容性需要额外测试。镜像安全扫描对拉取和构建的镜像进行漏洞扫描。限制资源使用--memory,--cpus等参数限制容器的资源使用避免单个容器耗尽主机资源。更新策略关注 Docker 和 containerd 的安全更新。在龙芯平台上这意味着你需要关注为你提供 rpm 包的社区或厂商是否有及时跟进上游的修复。备份与恢复定期备份/etc/docker配置目录和/var/lib/docker如果是 overlay2 驱动或/var/lib/containerd如果是 containerd 存储中的重要数据。了解如何通过备份恢复整个 Docker 环境。在龙芯这样的非主流架构上维护 Docker 环境稳定性比追新更重要。除非有明确的安全漏洞修复或必需的新功能否则不建议频繁升级 Docker 主版本。每次升级前务必在测试环境充分验证。