龙芯3B6000平台AnolisOS 23.4安装Docker及容器创建失败排查指南
在龙芯 3B6000 平台上运行 AnolisOS 23.4通过系统默认仓库安装 Docker 后遇到容器无法创建的问题是一个典型的国产化平台软件生态适配过程中的实战挑战。这个问题并非简单的命令错误其背后往往涉及内核模块支持、软件包版本兼容性、架构特定的依赖关系以及容器运行时配置等多个层面。对于需要在龙芯平台上进行应用容器化部署的开发者或运维人员来说理解并解决这个问题是打通从硬件到应用部署的关键一步。本文将带你从零开始在龙芯 3B6000 AnolisOS 23.4 的环境下完成 Docker 的安装、配置并系统性地排查和解决容器创建失败的问题最终实现一个可稳定运行的容器环境。1. 理解龙芯平台与 Docker 的兼容性挑战在 x86/ARM 架构上安装 Docker 通常是一条命令的事但在龙芯LoongArch架构上情况会复杂许多。龙芯 3B6000 处理器采用 LoongArch 指令集这是一个完全自主设计的指令集架构。Docker 的核心依赖于 Linux 内核的容器化功能如 cgroups、namespaces以及特定的运行时如 runc。虽然 Docker 官方提供了对多种架构的支持但 LoongArch 作为较新的架构其软件生态特别是预编译的二进制包和主流发行版的官方仓库支持仍在不断完善中。AnolisOS 23.4 作为一款兼容 CentOS/RHEL 生态的国产操作系统其默认仓库中的软件包是针对 LoongArch 架构编译的。这既是优势也是挑战。优势在于通过yum/dnf安装的软件理论上与系统其他组件兼容性更好。挑战在于仓库中 Docker 相关包的版本、依赖关系以及内核模块的适配程度可能无法直接满足 Docker 运行时的所有要求尤其是与容器创建直接相关的containerd和runc组件。容器无法创建的典型现象是执行docker run hello-world后命令长时间挂起最终报错退出错误信息可能涉及failed to create shim task、OCI runtime create failed或failed to start container等。其根本原因通常可以追溯到以下几个层面内核模块未启用或版本不匹配Docker 需要内核开启overlay、bridge、iptables等模块支持。containerd或runc版本/配置问题它们是 Docker 创建容器的实际执行者其 LoongArch 版本的二进制文件可能存在 bug 或配置不当。SELinux/AppArmor 安全策略限制安全模块可能阻止了容器进程的某些操作。系统资源限制如cgroup配置、用户进程数限制等。架构特定的依赖库缺失某些动态链接库在 LoongArch 环境下可能缺失或路径不正确。2. 环境准备与系统基础检查在进行任何安装操作之前必须确保系统处于一个干净、一致的状态并完成必要的基础配置。2.1 系统信息确认首先登录你的龙芯 3B6000 服务器通过以下命令确认系统版本和架构cat /etc/os-release uname -a lsb_release -a # 如果已安装 lsb_release 命令预期输出应明确显示AnolisOS 23.4和loongarch64架构。记录下完整的内核版本号例如5.10.xxx。2.2 更新系统并安装基础工具确保系统所有包更新到最新状态并安装后续排查可能需要的工具。sudo dnf update -y sudo dnf install -y vim wget curl net-tools lsof pciutils elfutils-libelf-devel2.3 检查并加载必需的内核模块Docker 依赖的内核功能需要对应的模块处于加载状态。运行以下命令检查lsmod | grep -E “overlay|bridge|nf_nat|veth|iptable|ip6table”如果这些模块没有显示可能需要手动加载或确认内核编译时已包含。对于 AnolisOS通常这些模块都已内置或可加载。可以尝试手动加载关键模块sudo modprobe overlay sudo modprobe br_netfilter为了让这些模块在系统启动时自动加载需要创建配置文件sudo tee /etc/modules-load.d/docker.conf EOF overlay br_netfilter EOF此外还需要配置系统参数以启用网络过滤和桥接sudo tee /etc/sysctl.d/docker.conf EOF net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 EOF sudo sysctl --system # 应用配置3. 通过 AnolisOS 默认仓库安装 Docker这是最直接的方式但也是问题可能出现的起点。3.1 安装 Docker 引擎及相关组件执行以下命令从 AnolisOS 默认仓库安装sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin注意在 LoongArch 架构的 AnolisOS 23.4 上docker-ce这个包名可能不存在于默认仓库。更常见的情况是仓库中提供的包名是docker或moby-engine。因此首先应该搜索可用的 Docker 相关包sudo dnf search docker sudo dnf search moby假设搜索结果显示包名为docker和docker-client那么安装命令应改为sudo dnf install -y docker docker-client containerd安装完成后验证安装的版本docker --version containerd --version runc --version # 如果 runc 作为独立包安装记录下这些版本号对于后续排查至关重要。3.2 启动 Docker 服务并设置开机自启sudo systemctl start docker sudo systemctl enable docker检查服务状态确保其处于active (running)状态sudo systemctl status docker如果服务启动失败使用journalctl -u docker --since “1 hour ago”查看详细日志。3.3 配置 Docker 守护进程可选但推荐编辑 Docker 守护进程配置文件/etc/docker/daemon.json。如果文件不存在则创建它。一个适用于基础环境的配置示例如下{ “exec-opts”: [“native.cgroupdriversystemd”], “log-driver”: “json-file”, “log-opts”: { “max-size”: “100m” }, “storage-driver”: “overlay2”, “storage-opts”: [ “overlay2.override_kernel_checktrue” ] }这个配置做了几件事使用systemd作为 cgroup 驱动与 AnolisOS 默认一致配置日志轮转并明确使用overlay2存储驱动。保存后重启 Docker 服务使配置生效sudo systemctl daemon-reload sudo systemctl restart docker4. 首次运行测试与问题现象复现完成安装和基础配置后进行最简单的容器运行测试。4.1 运行 Hello-World 容器sudo docker run hello-world如果一切正常你将看到来自 Docker 的欢迎信息。然而在龙芯 3B6000 AnolisOS 23.4 环境下你更可能遇到以下情况之一命令长时间挂起无任何输出最终超时或需要CtrlC中断。快速返回一个错误例如docker: Error response from daemon: failed to create shim: OCI runtime create failed: unable to retrieve OCI runtime error (open /run/containerd/io.containerd.runtime.v2.task/moby//log.json: no such file or directory): runc did not terminate successfully: unknown.提示镜像拉取失败但错误信息可能指向更深层的运行时问题。4.2 收集诊断信息当容器创建失败时不要盲目重试。首先收集全面的诊断信息# 1. 检查 Docker 服务状态和最近日志 sudo systemctl status docker -l sudo journalctl -u docker --since “-5min” --no-pager # 2. 检查 containerd 服务状态和日志如果它作为独立服务运行 sudo systemctl status containerd -l 2/dev/null || echo “containerd not running as separate service” journalctl -u containerd --since “-5min” --no-pager 2/dev/null # 3. 检查 Docker 系统信息 sudo docker info # 4. 检查 runc 二进制文件是否存在且可执行 which runc runc --version ls -la $(which runc) # 5. 查看内核消息可能有关键错误 sudo dmesg | tail -50将上述命令的输出保存到文件中这是分析问题的起点。5. 系统性排查与解决容器创建失败问题根据收集到的日志和信息我们可以按照以下路径进行系统性排查。5.1 排查路径一Containerd 与 Runc 运行时问题这是 LoongArch 架构下最常见的问题根源。Docker 默认使用containerd作为容器运行时而containerd调用runc来实际创建容器。如果runc的 LoongArch 版本存在 bug 或与当前内核不兼容就会导致创建失败。检查与解决步骤确认 runc 版本和路径docker info输出中会显示Runtimes和Default Runtime信息。确保runc可执行文件存在于系统中并且其版本与containerd兼容。升级或替换 runcAnolisOS 仓库中的runc可能版本较旧。可以尝试从更上游的源如 openEuler 的 LoongArch 仓库或龙芯社区寻找更新的runc包进行安装。注意直接替换runc二进制文件有风险建议先备份。# 备份原有 runc sudo cp $(which runc) $(which runc).bak # 假设你下载了新的 runc 二进制到 /tmp/runc.new sudo install -m 755 /tmp/runc.new $(which runc)切换容器运行时如果runc问题无法快速解决可以尝试使用crun一个用 C 语言编写的 OCI 运行时有时在非 x86 架构上兼容性更好或者旧版的docker-runc。但这需要重新配置containerd或 Docker较为复杂。检查 containerd 配置查看/etc/containerd/config.toml文件。确保[plugins.”io.containerd.grpc.v1.cri”.containerd.runtimes.runc]部分的runtime_type和binary_name设置正确。有时需要显式指定runc的路径。5.2 排查路径二内核与存储驱动问题龙芯内核可能对 OverlayFS 的某些特性支持有差异。检查与解决步骤验证 overlay2 支持运行sudo docker info | grep -i storage。确保Storage Driver是overlay2并且Backing Filesystem是xfs或extfs推荐 XFS 或 EXT4。检查文件系统特性对于overlay2需要底层文件系统如/var/lib/docker所在分区支持d_type目录条目类型。使用以下命令检查sudo df -T /var/lib/docker # 假设挂载点是 /dev/root sudo xfs_info /dev/root 2/dev/null | grep ftype # 对于 XFSftype 应为 1 # 或者 sudo tune2fs -l /dev/root 2/dev/null | grep features # 对于 EXT4应包含 dir_index 和 filetype如果d_type不支持docker info会显示警告。解决方案是使用支持d_type的文件系统如格式化时指定-n ftype1对于 XFS。尝试其他存储驱动作为临时测试可以尝试使用vfs存储驱动。vfs性能很差且不适用于生产但兼容性最高可以用于判断问题是否出在存储驱动上。在/etc/docker/daemon.json中添加“storage-driver”: “vfs”重启 Docker 后再次测试docker run hello-world。如果成功则问题很可能与overlay2和内核的交互有关。5.3 排查路径三安全模块与权限问题SELinux 或 AppArmor 可能会阻止容器进程执行某些操作。检查与解决步骤检查 SELinux 状态getenforce。如果结果是Enforcing可以尝试临时设置为Permissive进行测试sudo setenforce 0再次尝试运行容器。如果成功则说明是 SELinux 策略问题。你需要为 Docker 容器制定或调整 SELinux 策略或者在生产环境中评估是否可以将 SELinux 设置为Permissive不推荐或Disabled在/etc/selinux/config中修改并重启。检查用户命名空间虽然不常见但用户命名空间映射问题也可能导致故障。确保/etc/subuid和/etc/subgid文件存在并为运行 Docker 守护进程的用户通常是root或其所属的docker组配置了映射。5.4 排查路径四资源与 Cgroups 问题确保 Cgroups 被正确挂载且 Docker 可以访问。检查与解决步骤检查 cgroups 挂载运行mount | grep cgroup。应该看到cgroup2或cgroup文件系统挂载在/sys/fs/cgroup。Docker 需要 cgroups 来管理容器资源。检查 cgroup 驱动在docker info输出中查看Cgroup Driver。它应该与系统使用的 init 系统匹配AnolisOS 23.4 通常使用systemd。这已在之前的daemon.json配置中设置。检查系统资源限制使用ulimit -a查看当前用户的资源限制。确保max user processes和open files等限制不是过低。可以在/etc/security/limits.conf或 systemd service 文件中为 Docker 服务调整限制。6. 一个经过验证的解决方案示例假设经过排查你发现问题是 AnolisOS 23.4 默认仓库中的runc版本例如 1.1.7与当前内核存在兼容性问题。以下是一个可行的解决步骤停止 Docker 服务sudo systemctl stop docker sudo systemctl stop containerd # 如果独立运行备份并移除有问题的 runcsudo mv $(which runc) $(which runc).bak.orig从兼容的源安装新版 runc。例如从 openEuler 的 LoongArch 仓库下载。注意你需要根据你的系统版本这里是 AnolisOS 23.4对应 openEuler 22.03 LTS SP2 可能更接近和架构loongarch64寻找合适的 RPM 包。# 示例下载一个已知在龙芯3B6000上可用的 runc 包请替换为实际可用的URL wget https://repo.openeuler.org/openEuler-22.03-LTS-SP2/loongarch64/Packages/runc-1.1.9-1.oe2203sp2.loongarch64.rpm # 安装 sudo rpm -ivh --force runc-1.1.9-1.oe2203sp2.loongarch64.rpm # 或者使用 dnf localinstall sudo dnf localinstall -y runc-1.1.9-1.oe2203sp2.loongarch64.rpm如果找不到直接可用的 RPM也可以尝试从源码编译但这需要完整的 Go 开发环境。验证新 runc 版本runc --version重启 Docker 服务sudo systemctl start containerd # 如果独立运行 sudo systemctl start docker再次运行测试容器sudo docker run --rm hello-world如果成功你将看到经典的 “Hello from Docker!” 消息。7. 最佳实践与后续步骤成功运行第一个容器只是开始。为了在龙芯平台上获得稳定的容器化体验请遵循以下实践镜像兼容性确保你拉取的镜像有loongarch64标签。许多官方镜像如nginx:alpine,redis:alpine现在都提供多架构支持Docker 会自动拉取匹配的架构版本。对于自定义镜像你需要在龙芯机器上使用Dockerfile重新构建。监控与日志配置 Docker 的日志驱动和日志轮转策略如前文daemon.json所示。使用docker logs container_id查看容器日志。对于系统级监控可以将 Docker 守护进程日志接入journald或 ELK 等系统。网络配置龙芯平台的网络性能需要特别关注。如果遇到容器网络性能问题可以尝试调整 Docker 的网络驱动如使用macvlan获得原生性能或者优化宿主机的网络参数。生产环境考量存储为/var/lib/docker挂载独立的高性能磁盘如 SSD并使用 XFS 文件系统ftype1。安全在解决 SELinux 问题后应重新启用并配置正确的策略。定期更新 Docker、containerd 和 runc 到已知稳定的版本。资源管理使用docker run的--memory,--cpus等参数限制容器资源避免单个容器影响宿主机。编排考虑使用 Docker Compose 管理多容器应用。对于集群可以调研 Kubernetes 对 LoongArch 架构的支持情况目前已有社区版本开始提供支持。社区资源龙芯和 AnolisOS 的生态发展迅速遇到问题时优先查阅龙芯开源社区AnolisOS 官方文档和邮件列表openEuler LoongArch SIG 这些社区通常有更针对性的问题讨论和解决方案。通过以上步骤你不仅解决了“容器无法创建”这个具体问题更掌握了在国产化平台上部署和调试容器基础设施的方法论。从内核模块、运行时版本到安全策略每一步的排查都加深了对容器技术栈的理解。在龙芯这样的新兴架构上实践要求开发者具备更强的底层问题定位能力而这正是从“使用者”向“专家”迈进的关键。

相关新闻

佐治亚理工AI课程:从经典算法到深度学习实战全解析

佐治亚理工AI课程:从经典算法到深度学习实战全解析

今天我们来深入分析佐治亚理工学院的人工智能课程体系,特别是2025年最新版本如何帮助开发者吃透经典AI算法并掌握智能系统实战能力。作为全球顶尖的AI教育机构,佐治亚理工的课程设计始终紧跟技术前沿,同时保持对基础理论的深度挖掘。这套课程…

2026/10/17 6:38:24 阅读更多 →
魔兽争霸3终极优化指南:用WarcraftHelper实现流畅游戏体验

魔兽争霸3终极优化指南:用WarcraftHelper实现流畅游戏体验

魔兽争霸3终极优化指南:用WarcraftHelper实现流畅游戏体验 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸3》在现代电脑…

2026/10/2 2:42:09 阅读更多 →
Agent技术生态与核心架构解析

Agent技术生态与核心架构解析

1. Agent技术生态全景扫描 国内Agent技术生态正在经历从实验室研究到产业落地的关键转型期。根据2023年行业白皮书数据显示,国内Agent技术相关企业数量较2020年增长近300%,形成了以北京、上海、深圳为核心的三大技术集群。这个技术领域最显著的特征是&qu…

2026/10/16 16:54:49 阅读更多 →

最新新闻

2026年AI编程工具全解析:33款主流助手与IDE选型指南

2026年AI编程工具全解析:33款主流助手与IDE选型指南

2024年大家还在争论“AI能不能写代码”,到2026年这个问题基本不需要讨论了。我今年在好几个项目里把AI编程工具从“偶尔试用”变成了“日常主力”,从代码补全到自动化测试再到完整功能模块的实现,工具链已经成熟得超出预期。但问题也变成了另…

2026/10/17 21:02:08 阅读更多 →
Vibe Coding第二课:零基础搭建个人主页和数字分身

Vibe Coding第二课:零基础搭建个人主页和数字分身

Vibe Coding这个词,最近在开发者圈子里被反复讨论,但对真正零基础的人来说,它最诱人的点其实特别简单:你不需要先把编程学个半吊子,就能做出能给别人看的东西。第二课我们直接来干一件特别实在的事——从0到1搭一个你自…

2026/10/17 21:02:08 阅读更多 →
分步傅里叶法解NLS方程:MATLAB仿真孤子传输实战

分步傅里叶法解NLS方程:MATLAB仿真孤子传输实战

简介:非线性光纤光学与光通信领域的学习者、研究人员,常需掌握分步傅里叶法求解非线性薛定谔方程(NLS)的数值实现。该资源包提供了一份MATLAB源代码及详细解析文档,内容涵盖NLS方程建模、分步傅里叶法原理、代码结构梳…

2026/10/17 21:02:08 阅读更多 →
MATLAB调用外部软件:控件化封装与COM/system/MEX选型实战

MATLAB调用外部软件:控件化封装与COM/system/MEX选型实战

1. 项目缘起与整体设计思路1.1 为什么要在MATLAB里“调用”外部软件做过工程仿真或者数据处理的朋友大概率遇到过这种场景:手头有一套用MATLAB写的算法主流程,但某个关键环节依赖一个独立的第三方软件——可能是某个专业的求解器、一个老旧的C计算程序、…

2026/10/17 21:02:08 阅读更多 →
全网最全Python课程PDF如何高效利用:拆目录、验代码、避坑指南

全网最全Python课程PDF如何高效利用:拆目录、验代码、避坑指南

简介:一份以 PDF 文档形式整理的全网 Python 系统课程学习路线,适合零基础入门到希望进阶的开发者使用。文档提炼了 637 集课程的整体框架,按 Python 基础、进阶、终极、爬虫四篇展开,覆盖 Python 基础语法、坦克大战实战、网络并…

2026/10/17 21:02:08 阅读更多 →
约瑟夫环C语言循环链表实现:从建环到出圈的完整方案

约瑟夫环C语言循环链表实现:从建环到出圈的完整方案

简介:这是一份面向C语言初学者与数据结构学习者的约瑟夫死亡游戏完整实现资料,围绕循环链表这一核心结构展开,帮助读者理解环形链表的创建、遍历与结点删除等经典操作。资源包内仅含1个docx文档,大小约18KB,以文字形式…

2026/10/17 21:01:07 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →