龙芯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,输出应类似:
NAME="Anolis OS"
VERSION="23.4"
ID="anolis"
...
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/containerd
4. 安装适配龙芯架构的 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-plugin
5. 关键配置调整
安装完成后,直接启动可能依然失败,需要对 Docker 和 containerd 的配置进行针对性调整。
1. 配置 Docker 守护进程 (daemon.json)
创建或编辑
/etc/docker/daemon.json
文件:
{
“exec-opts”: [“native.cgroupdriver=systemd”],
“log-driver”: “json-file”,
“log-opts”: {
“max-size”: “100m”
},
“storage-driver”: “overlay2”,
“storage-opts”: [
“overlay2.override_kernel_check=true”
],
“default-runtime”: “runc”,
“runtimes”: {
“runc”: {
“path”: “runc”
}
},
“registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn”]
}
重点说明:
-
“storage-driver”: “overlay2”:这是推荐的文件系统驱动。 -
“overlay2.override_kernel_check=true”: 这个选项有时至关重要 。它让 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 seccomp=unconfined
参数。
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 -a
7. 解决“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会自动调用QEMU
8. 网络与存储高级问题排查
如果基础容器能运行,但自定义容器出现网络不通或存储问题,请按以下步骤排查。
网络问题排查:
-
检查 Docker 网络接口:
如果ip addr show docker0 docker network ls docker network inspect bridgedocker0网桥不存在,可以尝试重启 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
存储问题排查:
-
确认内核支持
overlay2:
应看到grep overlay /proc/filesystemsnodev 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.cgroupdriver=systemd”],
“log-driver”: “json-file”,
“log-opts”: {
“max-size”: “100m”
},
“storage-driver”: “overlay2”,
“storage-opts”: [
“overlay2.override_kernel_check=true”
],
“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 Engine
|
1. 版本不兼容
2.
containerd
故障
3. 存储驱动问题 |
sudo journalctl -u docker.service -n 50
|
1. 更换Docker版本
2. 检查并配置
/etc/containerd/config.toml
3. 在
daemon.json
中添加
“overlay2.override_kernel_check=true”
|
OCI runtime create failed
|
1.
runc
执行失败
2.
seccomp
配置问题
|
docker info
查看默认运行时
|
1. 确保
runc
已正确安装
2. 在
daemon.json
中设置
“seccomp-profile”: “”
或容器启动时加
–security-opt seccomp=unconfined
|
exec format error
|
镜像架构 (
amd64
) 与宿主机 (
loongarch64
) 不匹配
| `docker image inspect <镜像名> | grep Architecture` |
| 容器内网络不通 |
1.
docker0
网桥未创建
2.
iptables
规则冲突
3. DNS解析失败 |
ip addr show docker0
sudo iptables -L -n
容器内
cat /etc/resolv.conf
|
1. 重启Docker服务
2. 调整或停止防火墙 3. 运行容器时指定
–dns
|
| 端口绑定失败 | 宿主机端口已被占用 | `sudo ss -tlnp | grep :<端口号>` |
| 启动容器后立即退出 |
1. 容器内主进程执行完毕
2. 镜像默认命令不适用于当前架构 |
docker logs <容器ID>
|
1. 使用
-it
交互模式运行
2. 检查镜像的
CMD
或
ENTRYPOINT
,确保命令存在且可执行
|
在龙芯 3B6000 平台上部署 Docker 的核心挑战在于软件生态的适配。成功的关键在于三点:一是选择或编译一个与
loongarch64
架构及当前内核兼容的 Docker/containerd/runc 版本组合;二是进行正确的配置,特别是
overlay2
驱动和
seccomp
的调整;三是始终使用与目标架构匹配的容器镜像。
建议将稳定的配置(如有效的
daemon.json
、
config.toml
和安装的软件包版本)进行备份。在进行生产部署前,务必对网络、存储、应用性能进行充分测试。随着龙芯生态的快速发展,相信官方仓库的兼容性和软件包的丰富度会持续提升,届时安装过程将会更加顺畅。
更多推荐


所有评论(0)