这次我们来看一个在龙芯 3B6000 平台上安装高版本 Docker 29.5.1 的实战过程。对于使用国产龙芯架构LoongArch的开发者来说在系统包管理器里直接安装 Docker 常常会遇到架构不匹配、版本过低或依赖冲突的问题尤其是在追求新版本特性时。本文的核心就是绕过这些坑通过官方二进制包的方式在龙芯 3B6000 机器上成功部署 Docker 29.5.1并验证其核心功能。整个过程的关键点在于直接使用 Docker 官方发布的静态二进制包。这能让你摆脱对特定发行版仓库的依赖直接获得最新版本。我们将从环境检查开始一步步完成二进制包的下载、安装、服务配置和功能验证。如果你手头有龙芯 3B6000 的机器并且系统是 openEuler 或类似的 Linux 发行版那么这篇文章可以直接跟着操作。本文会详细演示如何确认系统架构、下载正确的二进制包、进行安装和权限配置最后通过运行容器、构建镜像等操作来验证 Docker 是否正常工作。我们还会探讨在龙芯架构上使用 Docker 的适用场景、可能遇到的兼容性问题以及基本的排查思路。1. 核心能力速览在深入步骤之前我们先快速了解通过此方法部署的 Docker 环境具备哪些核心能力以及它和通用 x86_64 平台部署的差异。能力项说明目标平台龙芯 3B6000 处理器LoongArch64 (loongarch64) 架构安装方式官方静态二进制包安装非系统包管理器 (dnf/yum/apt)Docker 版本29.5.1 (可灵活选择其他版本)依赖管理自包含不依赖系统仓库的特定版本库启动方式Systemd 服务管理 (systemctl start docker)主要功能完整的 Docker 命令行功能镜像拉取、容器运行、镜像构建、网络管理等兼容性注意部分 x86/ARM 专属镜像可能无法直接运行需寻找或构建 LoongArch64 架构的镜像适合场景龙芯平台上的应用容器化部署、开发测试环境搭建、CI/CD 流水线构建2. 适用场景与使用边界在龙芯 3B6000 上安装 Docker 主要服务于特定的技术场景和用户群体。适用场景国产化环境下的应用部署许多政务、金融、科研项目要求运行在国产芯片上使用 Docker 可以标准化应用交付环境简化部署复杂度。龙芯平台的软件开发与测试开发者为龙芯架构移植或开发软件时可以利用 Docker 创建干净、一致的编译和测试环境。学习与验证容器技术在龙芯硬件上实践 Docker 和容器技术了解其在不同架构上的行为差异。使用边界与注意事项镜像架构兼容性这是最大的边界。Docker Hub 上的大多数镜像是为linux/amd64(x86-64) 或linux/arm64构建的不能直接在linux/loong64上运行。你需要寻找明确支持linux/loong64的镜像或自行构建。性能考量由于架构差异通过 QEMU 等模拟器运行非原生架构的镜像会有显著性能损失不推荐用于生产环境。核心思路是使用原生或交叉编译构建 LoongArch64 的镜像。软件生态龙芯的 Docker 生态仍在发展中可能遇到某些工具或插件缺乏 LoongArch64 版本的情况。合规与安全始终从 Docker 官方或可信源下载二进制包。在拉取和运行第三方镜像时需注意镜像来源的安全性尤其是在内部或生产网络中。3. 环境准备与前置条件开始安装前请确保你的龙芯 3B6000 系统满足以下条件。以下操作假设你已具备 root 权限或可以使用 sudo。3.1 操作系统确认推荐使用 openEuler、Loongnix 等对龙芯支持较好的发行版。本文以 openEuler 24.03 LTS 为例但步骤在其他基于 systemd 的 Linux 发行版上大同小异。首先登录系统并确认架构和发行版信息hostnamectl关键信息是Architecture: loongarch64和Operating System。同时检查内核版本uname -a3.2 系统更新与基础工具确保系统已更新并安装必要的工具如curl、wget、tar# 对于 openEuler 使用 dnf其他发行版请使用对应的包管理器 dnf update -y dnf install -y curl wget tar gzip3.3 清理旧版本 Docker (如适用)如果系统之前通过其他方式安装过 Docker如旧的docker-engine建议先卸载以避免冲突dnf remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine删除残留的配置和数据谨慎操作会删除所有本地镜像和容器rm -rf /var/lib/docker rm -rf /var/lib/containerd4. 安装部署与启动方式我们将采用下载静态二进制压缩包并手动安装的方式这是绕过包管理器架构冲突最直接的方法。4.1 确定 Docker 二进制下载地址访问 Docker 官方 GitHub 的发布页面https://github.com/moby/moby/releases。我们需要找到适用于linux/loong64架构的tgz包。 截至撰写时最新稳定版是v29.5.1。我们可以使用curl和jq需安装dnf install -y jq来解析或直接拼接下载链接。对于龙芯架构二进制包名称通常包含linux-loong64或直接指明架构。一个可靠的下载链接格式如下# 示例Docker 29.5.1 的静态二进制包 # 注意实际链接请以官方 GitHub Release 页面为准以下链接为示例可能需要调整。 DOCKER_VERSION29.5.1 DOWNLOAD_URLhttps://github.com/moby/moby/releases/download/v${DOCKER_VERSION}/docker-${DOCKER_VERSION}.tgz重要由于官方 Release 资产列表可能变化更稳妥的做法是直接打开上述 GitHub Releases 页面在Assets列表中找到类似docker-29.5.1.tgz或moby-static-29.5.1.linux-loong64.tar.gz的文件右键复制其链接地址。4.2 下载并解压二进制包假设我们已获得正确的下载链接执行以下命令# 创建临时目录并进入 mkdir -p /tmp/docker-install cd /tmp/docker-install # 下载二进制包 (请替换为实际有效的URL) # 这里以可能存在的 moby-static 包为例如果不存在请寻找正确的包名。 wget https://github.com/moby/moby/releases/download/v29.5.1/moby-static-29.5.1.linux-loong64.tar.gz # 如果上述链接失效可以尝试下载通用 tgz 包但需确认其包含 loong64 二进制 # wget https://github.com/moby/moby/releases/download/v29.5.1/docker-29.5.1.tgz # 解压到临时目录 tar -xzvf moby-static-29.5.1.linux-loong64.tar.gz # 或 tar -xzvf docker-29.5.1.tgz解压后你会在目录中看到docker、dockerd、containerd、ctr、runc等二进制文件。4.3 安装二进制文件到系统路径将必要的二进制文件复制到/usr/bin/目录下# 复制核心二进制文件 sudo cp docker/* /usr/bin/你可以通过ls /usr/bin/docker和ls /usr/bin/dockerd来确认文件已存在。4.4 配置 Docker 系统服务 (Systemd)为了让 Docker 以服务形式运行需要创建 systemd 单元文件。创建docker.service文件sudo tee /etc/systemd/system/docker.service EOF [Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service containerd.service Wantsnetwork-online.target Requirescontainerd.service [Service] Typenotify ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock ExecReload/bin/kill -s HUP $MAINPID TimeoutSec0 RestartSec2 Restartalways StartLimitBurst3 StartLimitInterval60s LimitNOFILEinfinity LimitNPROCinfinity LimitCOREinfinity TasksMaxinfinity Delegateyes KillModeprocess OOMScoreAdjust-500 [Install] WantedBymulti-user.target EOF创建containerd.service文件如果二进制包中包含containerdsudo tee /etc/systemd/system/containerd.service EOF [Unit] Descriptioncontainerd container runtime Documentationhttps://containerd.io Afternetwork.target local-fs.target [Service] ExecStartPre-/sbin/modprobe overlay ExecStart/usr/bin/containerd Restartalways RestartSec5 Delegateyes KillModeprocess OOMScoreAdjust-999 LimitNOFILE1048576 LimitNPROCinfinity LimitCOREinfinity [Install] WantedBymulti-user.target EOF4.5 启动并启用 Docker 服务重新加载 systemd 配置启动服务并设置开机自启# 重新加载 systemd 配置 sudo systemctl daemon-reload # 启动 containerd 服务 sudo systemctl start containerd sudo systemctl enable containerd # 启动 docker 服务 sudo systemctl start docker sudo systemctl enable docker # 检查 docker 服务状态 sudo systemctl status docker --no-pager -l如果状态显示为active (running)则说明 Docker 服务已成功启动。5. 功能测试与效果验证服务启动后我们需要进行一系列测试来验证 Docker 是否完全正常工作以及它在龙芯平台上的实际表现。5.1 验证 Docker 命令行与版本首先运行最基本的命令检查 Docker 客户端和服务端版本docker version输出应显示Client:和Server:两部分且版本号均为29.5.1。Server部分的OS/Arch应显示为linux/loong64。这是最关键的一步确认了 Docker 守护进程正在龙芯架构上运行。5.2 运行一个简单的测试容器由于大多数标准镜像不支持linux/loong64我们需要找一个支持多架构或专门为龙芯构建的镜像。一个经典的选择是hello-world镜像但 Docker 官方的hello-world可能没有 loong64 版本。我们可以尝试运行一个极简的、基于scratch或alpine且支持多架构的镜像或者运行一个简单的命令来测试 Docker 引擎本身。更可靠的方法是测试docker run命令本身能否执行# 测试 docker run 命令的基本功能使用 busybox 的 loong64 版本如果存在 # 首先可以尝试拉取一个已知支持 loong64 的镜像例如来自第三方仓库的 busybox。 # 假设我们有一个本地的、为 loong64 编译的简单二进制可以将其打包进容器测试。 # 这里我们做一个更基础的测试使用 docker info 查看系统信息。 docker infodocker info命令会输出详细的 Docker 系统信息包括容器数量、镜像数量、存储驱动、内核版本等。如果这条命令能成功执行并返回信息说明 Docker 引擎工作正常。5.3 构建一个简单的 LoongArch64 镜像最有效的验证方式是亲自构建一个原生镜像。创建一个简单的Dockerfilecat /tmp/Dockerfile.test EOF FROM cr.loongnix.cn/library/alpine:latest # 注意需要确认该仓库的 alpine 镜像是否有 loong64 标签 # 这里仅作示例实际基础镜像需可用 RUN echo Hello from LoongArch64 Container! /hello.txt CMD cat /hello.txt EOF尝试构建注意前提是cr.loongnix.cn/library/alpine:latest支持 loong64cd /tmp docker build -t loong-test:latest -f Dockerfile.test .如果构建成功运行它docker run --rm loong-test:latest预期输出为Hello from LoongArch64 Container!。5.4 测试容器网络与数据卷运行一个能执行简单网络命令的容器测试网络连通性# 使用一个包含 shell 的基础镜像需支持 loong64 # 例如如果存在 loong64 的 busybox # docker run --rm busybox:latest ping -c 3 8.8.8.8 # 如果 busybox 不支持可以测试宿主机网络 docker run --rm --network host available-loong64-image ip addr show测试数据卷挂载echo Data from host /tmp/host_data.txt docker run --rm -v /tmp/host_data.txt:/data.txt available-loong64-image cat /data.txt预期输出为Data from host。6. 配置优化与日常使用安装完成后进行一些常用配置可以让 Docker 更好用。6.1 配置用户组非 root 用户运行 Docker默认情况下执行 Docker 命令需要 root 权限。将当前用户加入docker组可以免去sudosudo groupadd docker 2/dev/null || true # 如果组已存在则忽略错误 sudo usermod -aG docker $USER重要更改组后需要重新登录或使用newgrp docker命令使组生效。之后该用户就可以直接运行docker ps等命令了。6.2 配置镜像加速器在国内环境从 Docker Hub 拉取镜像可能很慢。可以配置国内镜像加速器。编辑或创建/etc/docker/daemon.json文件{ registry-mirrors: [ https://docker.mirrors.ustc.edu.cn, https://hub-mirror.c.163.com, https://mirror.baidubce.com ] }保存后重启 Docker 服务使配置生效sudo systemctl restart docker6.3 检查存储驱动龙芯平台常用的存储驱动是overlay2。通过docker info可以查看。确保其被启用且运行正常这对于容器性能和稳定性很重要。7. 资源占用与性能观察在龙芯平台上运行 Docker容器的资源占用主要取决于容器内运行的进程。Docker 守护进程本身dockerd和containerd会占用一定的内存和 CPU。7.1 查看 Docker 进程资源占用可以使用top或htop命令观察dockerd和containerd进程的 CPU 和内存使用情况top -p $(pgrep -d, dockerd) -p $(pgrep -d, containerd)在 idle 状态下它们通常只占用少量内存几十到几百 MB和可忽略的 CPU。7.2 容器资源限制与监控运行容器时可以使用-m、--cpus等参数限制其资源使用这对于在资源有限的龙芯开发板上尤其重要# 限制容器使用最多 512MB 内存和 1个 CPU 核 docker run -it --rm -m 512m --cpus1.0 image command使用docker stats命令可以实时查看所有运行中容器的资源使用情况CPU、内存、网络 I/O、块 I/Odocker stats7.3 性能考量原生 vs 模拟运行为linux/loong64编译的原生容器性能最佳。尝试运行linux/amd64镜像如果 Docker 配置了 binfmt_misc 和 qemu-user 模拟会有严重的性能开销仅适用于临时测试或无可替代的情况。I/O 性能容器内文件系统的 I/O 性能接近原生overlay2存储驱动成熟稳定。网络性能容器网络特别是bridge模式会有轻微开销但对于大多数应用可忽略。host网络模式性能与宿主机几乎一致。8. 常见问题与排查方法在龙芯架构上部署和使用 Docker 可能会遇到一些特有或常见的问题。下表列出了典型问题及解决方法问题现象可能原因排查方式解决方案执行docker version时Server部分为空或报错1. Docker 服务未启动。2. 用户权限不足未加入 docker 组且未使用 sudo。3.dockerd二进制路径错误或损坏。1.sudo systemctl status docker查看服务状态。2. 使用sudo docker version测试。3. 检查/usr/bin/dockerd文件是否存在且有执行权限。1. 启动服务sudo systemctl start docker。2. 将用户加入docker组并重新登录。3. 重新复制二进制文件并确保containerd也在运行。docker run提示exec format error尝试运行的镜像架构与宿主机 (linux/loong64) 不兼容。使用docker image inspect image-name查看镜像的Architecture字段。1. 寻找或构建支持linux/loong64的镜像。2. 如果必须运行其他架构镜像需安装qemu-user-static并注册 binfmt_misc但这会严重影响性能。拉取镜像非常慢或超时网络连接到 Docker Hub 不畅。使用time docker pull hello-world测试速度。配置国内镜像加速器修改/etc/docker/daemon.json。启动容器失败提示cgroup或iptables相关错误1. 内核不支持某些 cgroup 特性。2.iptables/nftables工具缺失或版本不兼容。1. 检查内核配置grep CGROUP /boot/config-$(uname -r)。2. 安装iptables和nftables包。1. 更新到支持完整 cgroup v2 的内核龙芯社区或发行版提供。2.dnf install -y iptables nftables。dockerd启动失败日志显示端口被占用默认端口 2375/2376 被其他进程占用。sudo netstat -tlnpgrep :2375构建镜像时apt-get update或yum install失败容器内的基础镜像使用的软件源不包含 loong64 架构的包或网络不通。进入容器交互模式手动测试docker run -it base-image /bin/sh然后执行更新命令。1. 在Dockerfile中使用适用于龙芯的国内软件源镜像。2. 确保基础镜像本身支持 loong64。磁盘空间不足Docker 默认存储目录 (/var/lib/docker) 空间耗尽。使用df -h /var/lib/docker查看。1. 清理无用镜像和容器docker system prune -a。2. 修改 Docker 数据目录到更大分区通过daemon.json的>