银河麒麟V10 ARM64系统离线安装Docker 26.1的深度避坑指南
在国产化操作系统替代浪潮中,银河麒麟V10 SP3 ARM64版本已成为许多关键基础设施的首选。但当我们尝试在其上部署Docker 26.1时,往往会陷入依赖关系的泥潭——特别是当环境严格限制网络访问时,传统的yum install变得束手无策。本文将分享一套经过实战检验的离线安装方法论,重点解析如何用rpm -Uvh --nodeps这把"双刃剑"巧妙破局。
1. 环境准备与依赖分析
1.1 系统版本确认
在开始前,必须精确识别系统版本。银河麒麟V10 SP3基于CentOS 8构建,但软件包依赖关系存在微妙差异。执行以下命令获取系统指纹:
nkvers | grep -i "kylin linux advanced server" uname -m对于ARM64架构,输出应包含aarch64标识。这个细节至关重要——错误的架构包会导致后续安装完全失败。
1.2 依赖树可视化
常规安装流程中,Docker 26.1的核心组件包括:
- docker-ce-26.1.0
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
- docker-compose-plugin
通过repoquery工具可以生成完整的依赖树(需联网环境):
yum install -y yum-utils repoquery --requires --resolve docker-ce-26.1.0 | sort -u典型输出会显示container-selinux >= 2:2.95等关键依赖项。建议将这些依赖包按层级分类存储:
离线包目录结构示例: ~/docker-offline/ ├── core/ # Docker主程序 ├── level1-deps/ # 直接依赖 ├── level2-deps/ # 间接依赖 └── conflict-resolve/ # 冲突解决方案包2. 离线包获取策略
2.1 官方源下载技巧
在有临时网络访问的环境下,使用yumdownloader比yum --downloadonly更可靠:
yum install -y yum-utils createrepo repotrack -a aarch64 -p ~/docker-offline/core \ docker-ce-26.1.0 \ docker-ce-cli \ containerd.io \ docker-buildx-plugin \ docker-compose-plugin关键参数说明:
-a aarch64:确保下载ARM64架构包repotrack:自动追踪所有层级依赖createrepo:为后续创建本地仓库做准备
2.2 依赖包手动审查
对每个下载的RPM包进行依赖审查:
rpm -qpR docker-ce-26.1.0-*.aarch64.rpm | grep -v "rtld"重点关注config()类型的脚本依赖,这些往往需要手动处理。建议建立依赖关系电子表格:
| 包名 | 所需最低版本 | 已安装版本 | 解决方式 |
|---|---|---|---|
| container-selinux | 2:2.95 | 无 | 需额外下载 |
| libseccomp | 2.3.0 | 2.4.3 | 已满足 |
| systemd | 219 | 239 | 已满足 |
3. 高风险安装方案实施
3.1 --nodeps的精准使用
当遇到无法解决的依赖循环时,选择性使用--nodeps:
# 先尝试正常安装基础依赖 rpm -ivh level1-deps/*.rpm # 对特定包跳过依赖检查 rpm -ivh --nodeps core/docker-ce-*.rpm # 事后补全依赖 for pkg in $(rpm -qR docker-ce | grep -v "rtld"); do find level2-deps/ -name "*${pkg%% *}*" -exec rpm -ivh {} \; done警告:此操作后必须验证关键功能
docker info | grep -i cgroupdriver ctr version
3.2 依赖隔离技术
通过LD_LIBRARY_PATH实现库文件隔离:
mkdir -p /opt/docker26/libs find /usr/lib64/ -name "libseccomp.so*" -exec cp {} /opt/docker26/libs/ \; echo "export LD_LIBRARY_PATH=/opt/docker26/libs:$LD_LIBRARY_PATH" >> /etc/profile.d/docker.sh配合环境变量启动Docker:
systemctl edit docker.service # 添加: [Service] Environment="LD_LIBRARY_PATH=/opt/docker26/libs"4. 安装后关键配置
4.1 存储驱动优化
针对ARM架构调整存储驱动:
cat > /etc/docker/daemon.json <<EOF { "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ], "exec-opts": ["native.cgroupdriver=systemd"] } EOF验证配置生效:
docker info | grep -E 'Storage Driver|Cgroup Driver'4.2 容器运行时调优
解决containerd与Kubernetes的CRI兼容问题:
mkdir -p /etc/containerd containerd config default > /etc/containerd/config.toml sed -i '/disabled_plugins/s/^/#/' /etc/containerd/config.toml systemctl restart containerd配置crictl端点:
cat <<EOF > /etc/crictl.yaml runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 EOF5. 故障诊断工具箱
5.1 依赖缺失诊断
快速定位缺失的依赖项:
ldd $(which dockerd) | grep "not found" rpm -qf --queryformat "%{NAME}\n" /usr/lib64/lib*.so* | sort -u5.2 回滚方案设计
创建安装事务日志:
rpm -qa | grep -E 'docker|containerd' > docker_install.log xargs rpm -e < docker_install.log建议在关键步骤前创建快照:
tar -zcvf /var/lib/docker-backup-$(date +%Y%m%d).tar.gz \ /var/lib/docker \ /etc/docker \ /etc/containerd6. 性能优化实践
针对ARM架构的特别优化:
cat >> /etc/sysctl.conf <<EOF # 容器网络优化 net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 # 内存管理 vm.overcommit_memory=1 vm.max_map_count=262144 EOFGPU加速支持(如有NVIDIA设备):
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.repo | tee /etc/yum.repos.d/nvidia-container-toolkit.repo