ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

银河麒麟v10 sp1 ARM架构安装Docker 18.09.7避坑指南

银河麒麟v10 sp1 ARM架构安装Docker 18.09.7避坑指南 简介面向银河麒麟V10 SP1 Server操作系统的Docker安装实操手册专门针对国产化环境下docker-ce部署依赖不全、官方源无docker server软件包等问题给出可复用的安装方案适合系统运维工程师、麒麟平台部署人员及国产化迁移项目参与者参考。资源为单个docx文档压缩包约17KB内容紧凑、步骤明确可对照执行。手册内容覆盖yum仓库配置阿里Docker源与麒麟官方源联合、docker-ce-cli与docker-ce 18.09.7-3.el7版本安装、启动与验证并提示最新版docker因container-selinux等依赖问题而无法安装的报错原因帮助读者避开常见坑点。目前已有7148人在CSDN学习或下载该资源。1. 银河麒麟v10 sp1 装 Docker为什么绕不开 18.09.7 这个固定版本拿到一台银河麒麟v10 sp1 serveraarch64 架构时我第一件事是跑yum install docker-ce结果被一条报错直接堵住nothing provides container-selinux 2:2.74 needed by docker-ce-3:20.10.17-3.el7.aarch64。这既不是网络问题也不是源没配好而是麒麟的依赖树根本喂不饱最新版 docker。折腾一轮之后能稳定落地的方案只有一个锁定 docker-ce 18.09.7 这个固定版本先把docker-ce-cli-18.09.7-3.el7装上再装docker-ce-18.09.7-3.el7系统依赖全部走麒麟官方源补齐。下面这套步骤和踩坑记录就是给在 ARM 麒麟服务器上部署容器环境的运维和开发准备的。2. 装 Docker 前的底数核查aarch64 架构、双 yum 源与版本对应关系很多人一上来就写 repo 文件、跑安装命令结果报错之后才发现连机器是 x86 还是 ARM 都没确认。麒麟 v10 sp1 同时发 x86_64 和 aarch64 两套 isodocker-ce 的 RPM 包也分两种架构repo 里的$basearch变量会自动解析但前提是你得知道自己属于哪一套。下面先说清楚开工前必须确认的三件事。2.1 先认清机器aarch64 还是 x86_64内核是不是麒麟改过的 4.19确认架构用uname -m确认系统版本看/etc/os-release再顺便看一眼内核版本。uname -m cat /etc/os-release | head -5 uname -runame -m输出aarch64说明这是 ARM 64 位机器实际跑在鲲鹏 920 这类芯片上输出x86_64则走另一套 rpm 包。麒麟 v10 sp1 的内核默认是 4.19 系列但打过麒麟自己的补丁版本号里会带kylin字样uname -r看一眼就知道系统是不是被换过内核的。这一步别省因为后面所有 docker 存储驱动、iptables 兼容性问题都跟内核有关。2.2 双源逻辑为什么阿里 docker 源不够用麒麟官方源又不能省银河麒麟 v10 sp1 的官方源里没有 docker-ce 软件包这是手册里明确写到的。所以要装 docker第一步必须是引入第三方源常见做法是走阿里云镜像。但阿里源只提供 docker 本体和它的直接组件docker-ce 的 RPM 依赖链条里还有container-selinux、audit-libs-python、iptables等系统级包这些必须从麒麟官方源拿——因为阿里源是按 CentOS 7 的 yum 仓库结构组织的它的依赖元数据对麒麟系统不成立硬指过去会出现“找不到基准”的错。源提供内容作用阿里 docker 源docker-ce、docker-ce-cli、containerd.iodocker 本体及 CLI 工具麒麟官方源container-selinux、audit-libs-python、iptables 等系统依赖包补齐依赖树保证 yum 能完成整条解析实际安装时yum 会同时读这两个源RPM 包本体从阿里拉缺失的系统依赖从麒麟源补。两个源缺一个都会导致安装中断。2.3 el7 后缀的含义麒麟不是 CentOS但依赖按 CentOS 7 的规范解析docker-ce 的 rpm 包名里带着el7比如docker-ce-18.09.7-3.el7.aarch64.rpm很多人看到这个很心虚觉得麒麟是不是装不了。这里要说透el7不是指这个包只能在 CentOS 上跑而是指它的依赖关系按照 RHEL 7 / CentOS 7 的规范声明。麒麟 v10 sp1 的包体系兼容这个规范所以阿里源里linux/centos/7/路径下的 aarch64 仓库可以直接用。这也是为什么 baseurl 要指向 centos/7 而不是 centos/8方向错了版本解析就对不上。3. 配置 yum 源阿里 Docker 源与麒麟官方源的写法及参数拆解底数摸清之后下一步就是落地两个 repo 文件。这部分参数有一个算一个全都要能解释清楚否则后面 gpg 校验失败或者 404 了你都不知道往哪儿查。3.1 新建 docker-ce.repo阿里源的路径结构与参数逐行拆解在/etc/yum.repos.d/目录下新建文件docker-ce.repo内容如下。[docker-ce-stable] nameDocker CE Stable - 7 baseurlhttps://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable enabled1 gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-stable]是仓库唯一标识符yum 通过它去重baseurl里的$basearch是变量aarch64 机器上会自动解析成aarch64所以实际请求的是https://mirrors.aliyun.com/docker-ce/linux/centos/7/aarch64/stable不需要你手动改成 arm64 之类的路径gpgcheck1表示拉下来的 rpm 要做签名校验公钥从gpgkey指定的地址下载。如果你的服务器在内网访问公网不通这两个参数是第一批要调整的后面避坑章会说。3.2 配置 kylin_aarch64.repo依赖包从这里补齐单独新建麒麟官方源文件名字随意但路径里的 sp 版本号一定不能抄错。[ks10-os-media] name Kylin Linux Advanced Server 10 - Os baseurl http://archive.kylinos.cn/yum/v10/sp1-openstack-q/aarch64/os gpgcheck 0 enabled 1这里有个细节值得注意baseurl里是sp1-openstack-q这个仓库是麒麟为服务器场景维护的集合仓库aarch64 的依赖包都集中在os子路径下。gpgcheck0是因为麒麟源的签名公钥在部分内网环境下拉不回来手册里也直接关掉了校验这在企业内网部署里是常见做法不算错误配置。3.3 验证源配置repolist、makecache 与常见的 404 排查配置完两个 repo 文件之后先清理缓存再重建然后看仓库是否正常加载。yum clean all yum makecache yum repolistyum clean all会清掉/var/cache/yum下的旧元数据这一步在改过 repo 之后必须做否则 yum 可能用缓存里的旧索引去解析表现成“明明改了源却不生效”。yum repolist输出里应该能看到两个仓库repo id 分别是docker-ce-stable和ks10-os-media。如果makecache阶段报 404多半是路径里的版本号不对或者内网 DNS 解析不到archive.kylinos.cn优先检查这两处不要急着改http为https。4. 固定版本安装 Docker从 docker-ce-cli 到 docker-ce 的完整命令链源配好之后真正的安装阶段其实只有几步命令但顺序有讲究。先装谁后装谁不是随手写的而是由 RPM 的依赖关系决定的。4.1 为什么必须先把 docker-ce-cli 锁版本直接yum install docker-ce会触发 yum 自动解析依赖它大概率会选仓库里最新版的docker-ce-cli和containerd.io然后和你要装的固定版本拼出一个“混搭依赖树”。后果就是 dockerd 是 18.09.7而 CLI 可能是 20.10.17两边协议握手直接失败docker ps都能跑但docker exec或者容器 attach 时行为诡异非常难排查。所以正确顺序是先把 CLI 钉死在指定版本再装 docker-ce 本体让 yum 顺着已经锁死的依赖去匹配。yum install -y docker-ce-cli-18.09.7-3.el7 yum install -y docker-ce-18.09.7-3.el7这里-y表示自动确认省去交互提示版本号18.09.7-3.el7是完整写法-3是 release 号.el7是构建目标系统标记aarch64 架构下 yum 会自动选对应 rpm不用你手动指定架构后缀。两条命令依次执行如果第二条报依赖缺失回头检查第三章里麒麟源是不是没配好。4.2 启动并验证systemctl 和 docker 双端检查安装完成后启动服务并验证命令如下。systemctl start docker systemctl status docker docker --version docker versionsystemctl start docker只是启动服务systemctl status docker能看到active (running)字样才算真正起来docker --version输出的是客户端版本预期是Docker version 18.09.7, build 2d0083ddocker version则同时显示 Client 和 Server 两段信息Server 段出现才是 dockerd 正常响应的证据。很多人只看systemctl就说“启动成功”其实 dockerd 崩了 systemd 有时候都不报错docker version的 Server 段才是硬标准。进一步验证容器能跑拉个 hello-world 镜像。docker run hello-worldaarch64 机器会拉取linux/arm64变体镜像如果镜像拉取因为网络问题失败了可以用docker pull busybox:latest代替验证busybox 镜像小拉取成功率更高。4.3 如果仓库里有多个版本用 showduplicates 查版本再精确锁定如果你不是照抄手册而是想确认仓库里有哪几个版本可用用yum --showduplicates list查。yum --showduplicates list docker-ce输出会列出仓库中所有可用版本包括18.09.7-3.el7、20.10.17-3.el7等选择目标版本后yum install docker-ce-完整版本号即可锁定安装。注意--showduplicates必须和list搭配使用单独写yum list docker-ce默认只显示最高版本你会误以为仓库里只有一个版本可选。5. 常见问题与避坑selinux 依赖、daemon 启动失败与源失效排查手册里最值钱的其实不是安装步骤而是“最新版装不上”这个结论。我在实际部署里把这条坑又踩了一遍还额外碰到几个启动阶段的问题整理成五条按“现象 → 原因 → 解决”的顺序记录。5.1 最新版 docker-ce 装不上container-selinux 2.74 这道坎现象直接执行yum install docker-ce报错nothing provides container-selinux 2:2.74 needed by docker-ce-3:20.10.17-3.el7.aarch64。原因20.10.17 这个版本的 docker-ce 依赖container-selinux至少 2.74 版本而麒麟 v10 sp1 官方源里提供的版本远低于这个门槛yum 找不到能满足依赖的包于是放弃安装。解决放弃最新版改用yum install docker-ce-18.09.7-3.el7固定版本。如果你想硬上最新版需要手动从 CentOS 7 的 extras 源找高版本container-selinux的 rpm 离线装上但它的依赖链条还会拖出python3-audit等一串包在 ARM 架构下很容易滚雪球我不建议在业务机器上这么赌。5.2 docker ps 连不上 daemon启动成功了但 socket 没起来现象systemctl start docker没有任何报错但执行docker ps报Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?。原因systemd 显示服务处于 active 状态但 dockerd 进程可能已经崩溃退出/var/run/docker.sock文件不存在CLI 自然连不上。常见诱因是 iptables 初始化失败或者 overlay2 存储驱动与内核模块不匹配。解决先看日志定位执行journalctl -u docker -n 50重点看有没有Error starting daemon: Error initializing network controller之类的字段。麒麟服务器默认开着 firewallddocker 的 FORWARD 链和它冲突是高频原因临时验证可以把 firewalld 加入 docker0 接口到 trusted 区域或者先systemctl stop firewalld确认是不是它的锅再考虑长期策略。5.3 gpg 校验失败公钥拉不下来现象yum install时报GPG key retrieval failed或者提示公钥不存在。原因gpgcheck1要求从gpgkey地址下载公钥做签名校验内网环境访问mirrors.aliyun.com被防火墙或者代理拦截公钥拉不回来。解决先手动导入公钥rpm --import https://mirrors.aliyun.com/docker-ce/linux/centos/gpg成功之后再跑安装命令如果公钥地址确实不通临时把docker-ce.repo里的gpgcheck改成0装完包之后改回来。注意不要长期开着gpgcheck0内网源还好公网源不做完整性校验等于把服务器裸奔。5.4 麒麟官方源 404archive.kylinos.cn 的路径会变现象yum makecache报Cannot find a valid baseurl for repo: ks10-os-media检查 URL 发现打开是 404。原因麒麟官方源的路径里带 sp 版本号和场景名比如sp1-openstack-q官方调整仓库结构时旧路径会失效而且同类路径不止一个很多人硬拼一个出来结果打不开。解决去麒麟官网或社区找当前 sp 版本对应的最新仓库路径替换 repo 文件里的baseurl替换后必须重新执行yum clean all yum makecache。别想着用浏览器访问archive.kylinos.cn一层层点进去看目录列表大概率是关的直接搜别人验证过的路径更高效。5.5 装完 docker 后防火墙端口不通现象容器起来了但宿主机上其他机器访问容器映射出来的端口超时telnet都不通。原因麒麟默认启用 firewalld它和 docker 的 iptables 规则叠加之后FORWARD 链的默认策略会丢掉转发流量。解决最简单的是把 docker0 加入 trusted 区域firewall-cmd --permanent --zonetrusted --add-interfacedocker0然后firewall-cmd --reload。如果业务对安全要求高可以精确放行暴露的端口但这种场景下我一般建议直接用docker run -p加宿主机防火墙放行指定端口而不是动整个 docker0。6. 装完不等于能用daemon.json、开机自启与离线 rpm 缓存技巧docker 装好、能跑 hello-world这只是开始。上线之前我会强制自己在每台麒麟服务器上过一遍下面三件事它们能挡住你后面至少一个月的零碎问题。先配置/etc/docker/daemon.json把镜像加速、数据目录和日志轮转一次配好。{ registry-mirrors: [https://你的加速ID.mirror.aliyuncs.com], data-root: /data/docker, log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 }, iptables: true }registry-mirrors填阿里云容器镜像服务的加速地址或内网 Harbor 的地址>systemctl enable docker这一步必须在确认 dockerd 能稳定启动之后再执行避免服务器重启后进入一个“服务起不来、业务全挂”的状态。最后是很实用的离线缓存技巧。生产环境很多麒麟服务器和外网隔离你不可能在每台机器上重新走一遍在线安装我一般会在一台能连外网的机器上用yumdownloader把装 docker 所需的全部 rpm 攒下来。yum install -y yum-utils yumdownloader --resolve --destdir/root/docker_rpm docker-ce-18.09.7-3.el7 docker-ce-cli-18.09.7-3.el7--resolve会把依赖包一起拉下来--destdir指定输出目录。拿到这包 rpm 之后内网机器上用rpm -Uvh *.rpm就能离线装完不用再配任何外网源。注意yumdownloader属于yum-utils工具集先装yum-utils再用。从那以后我在麒麟机器上装 docker头两步永远是uname -m看架构再yum --showduplicates list docker-ce看仓库里实际有哪些版本确认依赖树能完整解析才动手。这个习惯帮我挡掉了不少玄学问题——大部分“装不上”并不是命令写错而是源和版本没对好。希望帮到你。本文还有配套的精品资源点击获取
返回列表