龙芯3B6000平台AnolisOS 23.4安装Docker容器化部署全攻略
这次我们来看一个在龙芯 3B6000 平台上使用 AnolisOS 23.4 系统时通过默认仓库安装 Docker 后容器无法创建的具体问题。对于国产化平台的开发者或运维人员来说在龙芯架构上顺利运行 Docker 是进行应用容器化部署的关键一步。然而直接使用系统默认仓库安装的 Docker 版本可能会遇到容器引擎启动失败、镜像拉取错误或容器创建进程卡住等一系列问题导致容器化工作流中断。本文将直接切入主题先分析问题现象与核心原因再提供一套从环境检查、问题定位到最终解决的完整实操方案。重点不是复述通用的 Docker 安装命令而是聚焦于龙芯 3B6000 AnolisOS 23.4 这一特定组合下的兼容性陷阱和解决方案。如果你正在或计划在龙芯平台上部署容器服务这篇文章提供的排查思路和修复步骤可以直接应用。1. 核心问题速览在深入操作之前我们先快速了解问题的全貌。下表概括了在龙芯 3B6000 AnolisOS 23.4 环境下使用默认仓库安装 Docker 时可能遇到的核心障碍问题环节典型现象核心原因Docker 服务启动执行systemctl start docker失败提示Failed to start Docker Application Container Engine.默认安装的 Docker 版本如20.10.24与当前内核或系统库存在兼容性问题或containerd配置异常。容器创建与运行执行docker run hello-world命令卡住无输出或报错docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: ...容器运行时如runc与龙芯架构的适配问题或seccomp安全配置不支持。镜像拉取与运行拉取镜像成功但运行时报错exec format error拉取的镜像架构如amd64与宿主机的loongarch64架构不匹配。网络与存储容器内部网络不通或卷挂载失败网络驱动如bridge初始化问题或文件系统特性如overlay2支持不完整。本文将围绕上述问题提供从验证到解决的一站式指南。2. 环境准备与现状确认在开始修复之前必须明确你的系统环境。请依次执行以下命令收集关键信息。1. 确认系统与内核版本cat /etc/os-release uname -a对于 AnolisOS 23.4 on 龙芯 3B6000输出应类似NAMEAnolis OS VERSION23.4 IDanolis ... Linux localhost 5.10.xxx-loongarch64 #1 SMP ... loongarch64 loongarch64 loongarch64 GNU/Linux请记录下完整的内核版本号。2. 确认当前 Docker 安装状态与版本# 检查Docker是否已安装及其版本 docker --version # 或使用更详细的命令 docker version # 检查Docker服务状态 systemctl status docker如果通过默认仓库安装版本可能为20.10.24或类似。服务状态很可能显示为failed或inactive (dead)。3. 检查 containerd 状态Docker 依赖containerd作为底层运行时。systemctl status containerd如果containerd也未正常运行那么问题可能出在更底层。4. 查看 Docker 服务启动日志这是定位启动失败原因的最直接方法。sudo journalctl -u docker.service --no-pager -n 50仔细查看日志末尾的error信息常见的错误线索包括failed to start daemon: Error initializing network controller: ...(网络控制器初始化失败)error starting containerd: ...(containerd启动错误)seccomp is not supported(安全计算模块不支持)与runc或cgroup相关的错误。完成以上信息收集后你已经对问题有了初步定位。接下来我们进入具体的排查与解决流程。3. 彻底卸载旧版本 Docker如果 Docker 服务无法正常启动建议先进行彻底卸载清理可能存在的配置冲突。注意此操作会删除所有本地镜像、容器、卷和网络请务必先备份重要数据。# 1. 停止Docker相关服务 sudo systemctl stop docker sudo systemctl stop containerd # 2. 卸载Docker引擎及相关软件包 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine \ containerd.io \ runc # 3. 删除Docker相关数据和目录 sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd # 4. 删除残留的配置文件谨慎操作确保无自定义配置 sudo rm -rf /etc/docker sudo rm -rf /etc/containerd4. 安装适配龙芯架构的 Docker 版本默认的yum install docker命令安装的版本可能未经充分适配。我们需要寻找或确认一个能在龙芯 3B6000 (loongarch64) 上稳定运行的 Docker 版本。有以下几个途径途径一使用 AnolisOS 官方或社区提供的适配版本访问 Anolis OS 的官方镜像站或社区仓库查看是否有针对loongarch64架构的、经过测试的 Docker 软件包。安装命令可能类似# 示例具体仓库地址需根据实际情况查找 sudo yum install docker-ce-适配版本 docker-ce-cli-适配版本 containerd.io途径二从源码编译安装适用于高级用户如果找不到预编译包可以考虑从 Docker 或 containerd 的源码进行编译。此过程复杂需要完整的开发环境和较长时间。准备编译环境安装gcc,make,git等。获取源码从 GitHub 克隆moby/docker,containerd/containerd,opencontainers/runc等仓库。针对loongarch64架构进行交叉编译或本地编译。手动安装编译产物。途径三采用容器化方式安装如使用 systemd-nspawn 或第三方工具这不是主流方案仅作为备选思路。对于大多数用户建议优先尝试途径一。如果官方仓库没有明确标识可以尝试安装较新的稳定版例如 Docker CE 24.0.x 或 25.0.x 系列这些版本对新型架构的支持可能更好。安装命令示例如下需要先配置正确的仓库源# 添加Docker官方CE仓库注意官方可能不直接提供loongarch64包此处为示例流程 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装指定版本例如 24.0.9 sudo yum install docker-ce-24.0.9 docker-ce-cli-24.0.9 containerd.io docker-buildx-plugin docker-compose-plugin5. 关键配置调整安装完成后直接启动可能依然失败需要对 Docker 和 containerd 的配置进行针对性调整。1. 配置 Docker 守护进程 (daemon.json)创建或编辑/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” ], “default-runtime”: “runc”, “runtimes”: { “runc”: { “path”: “runc” } }, “registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn”] }重点说明“storage-driver”: “overlay2”这是推荐的文件系统驱动。“overlay2.override_kernel_checktrue”这个选项有时至关重要。它让 Docker 忽略内核对于overlay2的某些严格检查在龙芯内核可能未完全暴露某些特性时允许驱动继续工作。“registry-mirrors”配置国内镜像加速器可以极大提升拉取镜像的速度。2. 配置 containerd编辑/etc/containerd/config.toml文件。如果文件不存在可以先生成默认配置sudo containerd config default | sudo tee /etc/containerd/config.toml然后需要修改其中与沙箱sandbox相关的配置。找到[plugins.”io.containerd.grpc.v1.cri”.containerd.runtimes.runc.options]部分确保或添加SystemdCgroup true。同时检查sandbox_image是否指向一个可拉取的、支持loongarch64的暂停容器镜像例如sandbox_image “registry.aliyuncs.com/google_containers/pause:3.9”3. 处理 seccomp 问题龙芯架构的内核对 seccomp 的支持可能不完整。如果日志中出现seccomp相关错误可以尝试在启动容器时全局禁用 seccomp注意这会降低安全性仅用于测试和问题定位。 在/etc/docker/daemon.json中添加{ …, “seccomp-profile”: “” }或者在运行单个容器时使用–security-opt seccompunconfined参数。6. 启动服务与验证基础功能完成配置后启动服务并验证。# 1. 重新加载systemd配置并启动服务 sudo systemctl daemon-reload sudo systemctl start containerd sudo systemctl start docker # 2. 设置开机自启 sudo systemctl enable containerd docker # 3. 检查服务状态 sudo systemctl status docker sudo systemctl status containerd此时两个服务的状态应为active (running)。4. 运行测试容器现在尝试运行一个最简单的容器。关键点必须使用支持loongarch64架构的镜像。直接运行docker run hello-world很可能会失败因为 Docker Hub 上的官方hello-world镜像可能没有loongarch64的版本。我们可以运行一个架构无关的、极简的容器来测试 Docker 引擎本身是否工作# 使用busybox镜像它通常提供多架构支持 docker run --rm busybox echo “Hello, LoongArch!”如果命令成功执行并输出了 “Hello, LoongArch!”恭喜你Docker 引擎已经可以正常创建和运行容器了。如果busybox也失败可以尝试显式指定一个已知支持loongarch64的镜像或者自己构建一个。例如使用一个基础的alpine镜像需确认有 loongarch64 标签docker run --rm alpine:edge uname -a7. 解决“exec format error”与镜像架构问题当 Docker 服务本身运行正常但运行特定镜像报错exec format error时这几乎 100% 是镜像架构与宿主机不匹配造成的。龙芯 3B6000 是loongarch64架构而 Docker Hub 上大多数镜像默认是linux/amd64。解决方案寻找多架构镜像在拉取镜像时使用明确支持linux/loongarch64的标签。例如一些官方镜像如nginx、redis和社区维护的镜像已经开始提供多架构支持。# 拉取时可以尝试指定标签如 -alpine 版本有时更早支持新架构 docker pull nginx:alpine # 拉取后检查镜像架构 docker image inspect nginx:alpine | grep Architecture使用docker buildx构建自己的镜像这是最根本的解决方案。docker buildx支持跨平台构建。你可以在x86_64的机器上为loongarch64构建镜像。首先确保安装了buildx插件。创建一个新的构建器实例支持多平台docker buildx create --name mybuilder --use docker buildx inspect --bootstrap编写Dockerfile然后使用buildx构建并推送到镜像仓库docker buildx build --platform linux/loongarch64 -t your-image:tag . --push在龙芯机器上直接拉取your-image:tag即可。使用 QEMU 用户态模拟不推荐用于生产可以安装qemu-user-static来模拟运行amd64或arm64的镜像。但这会带来显著的性能开销和兼容性问题仅作为临时测试手段。# 在宿主机上注册QEMU模拟器 docker run --privileged --rm tonistiigi/binfmt --install all # 之后尝试运行为其他架构构建的镜像Docker会自动调用QEMU8. 网络与存储高级问题排查如果基础容器能运行但自定义容器出现网络不通或存储问题请按以下步骤排查。网络问题排查检查 Docker 网络接口ip addr show docker0 docker network ls docker network inspect bridge如果docker0网桥不存在可以尝试重启 Docker 服务或手动创建。检查iptables/nftables规则。Docker 会管理大量网络规则有时与现有防火墙规则冲突。可以暂时停止防火墙服务 (systemctl stop firewalld) 测试是否为防火墙问题。检查容器内部 DNS 配置。在运行容器时可以指定 DNS 服务器docker run --dns 8.8.8.8 --dns 114.114.114.114 --rm busybox nslookup baidu.com存储问题排查确认内核支持overlay2grep overlay /proc/filesystems应看到nodev overlay。检查overlay2所需的内核模块是否加载lsmod | grep overlay如果使用devicemapper等其它存储驱动在龙芯平台上可能遇到更多问题强烈建议使用overlay2。9. 完整安装与验证流程示例假设我们从一个干净的 AnolisOS 23.4 系统开始以下是一个综合性的步骤示例# 步骤1更新系统并安装基础工具 sudo yum update -y sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 步骤2添加可靠的Docker CE仓库这里以阿里云镜像为例需确认支持loongarch64 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 步骤3安装Docker引擎和命令行工具 # 先搜索可用版本选择较新的稳定版例如 25.0.x sudo yum list docker-ce --showduplicates | sort -r sudo yum install -y docker-ce-25.0.3 docker-ce-cli-25.0.3 containerd.io docker-buildx-plugin docker-compose-plugin # 步骤4配置Docker 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” }, “storage-driver”: “overlay2”, “storage-opts”: [ “overlay2.override_kernel_checktrue” ], “registry-mirrors”: [“https://你的镜像加速器地址.mirror.aliyuncs.com”] } EOF # 步骤5配置containerd sudo containerd config default | sudo tee /etc/containerd/config.toml # 重启containerd使配置生效 sudo systemctl restart containerd # 步骤6启动并启用Docker服务 sudo systemctl start docker sudo systemctl enable docker # 步骤7验证安装 sudo docker --version sudo systemctl status docker sudo docker run --rm hello-world # 如果此步失败参考第6、7节使用busybox测试10. 常见问题与排查方法总结下表将常见问题、现象、可能原因和解决方案进行了归纳便于快速查阅问题现象可能原因排查命令/位置解决方案Failed to start Docker Application Container Engine1. 版本不兼容2.containerd故障3. 存储驱动问题sudo journalctl -u docker.service -n 501. 更换Docker版本2. 检查并配置/etc/containerd/config.toml3. 在daemon.json中添加“overlay2.override_kernel_checktrue”OCI runtime create failed1.runc执行失败2.seccomp配置问题docker info查看默认运行时1. 确保runc已正确安装2. 在daemon.json中设置“seccomp-profile”: “”或容器启动时加–security-opt seccompunconfinedexec format error镜像架构 (amd64) 与宿主机 (loongarch64) 不匹配docker image inspect 镜像名grep Architecture容器内网络不通1.docker0网桥未创建2.iptables规则冲突3. DNS解析失败ip addr show docker0sudo iptables -L -n容器内cat /etc/resolv.conf1. 重启Docker服务2. 调整或停止防火墙3. 运行容器时指定–dns端口绑定失败宿主机端口已被占用sudo ss -tlnpgrep :端口号启动容器后立即退出1. 容器内主进程执行完毕2. 镜像默认命令不适用于当前架构docker logs 容器ID1. 使用-it交互模式运行2. 检查镜像的CMD或ENTRYPOINT确保命令存在且可执行在龙芯 3B6000 平台上部署 Docker 的核心挑战在于软件生态的适配。成功的关键在于三点一是选择或编译一个与loongarch64架构及当前内核兼容的 Docker/containerd/runc 版本组合二是进行正确的配置特别是overlay2驱动和seccomp的调整三是始终使用与目标架构匹配的容器镜像。建议将稳定的配置如有效的daemon.json、config.toml和安装的软件包版本进行备份。在进行生产部署前务必对网络、存储、应用性能进行充分测试。随着龙芯生态的快速发展相信官方仓库的兼容性和软件包的丰富度会持续提升届时安装过程将会更加顺畅。