ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

银河麒麟v10 SP1 Server装Docker 18.09.7:yum源配置与依赖避坑指南

银河麒麟v10 SP1 Server装Docker 18.09.7:yum源配置与依赖避坑指南 简介《银河麒麟v10 sp1 server安装docker手册》是一份面向国产化环境运维人员与开发者的实操文档专门解决麒麟服务器上因软件源缺失、依赖不兼容而装不上docker的问题。全部内容集中在一个docx文档共1个文件中压缩包仅17KB篇幅精简但步骤完整。文档先指导配置yum源既加入阿里云docker-ce源又补充麒麟官方源用于安装依赖包随后依次演示安装docker-ce-cli 18.09.7、安装docker-ce、启动docker服务并查看版本每个环节都给出了命令与输出示例便于读者对照执行和验证。同时文档特别说明了无法通过yum直接安装最新版docker的原因列出了container-selinux版本缺失的具体报错并介绍了--skip-broken、--nobest等可尝试参数为后续排错提供了切入点。该资料已有7199人学习适合需要在银河麒麟v10 sp1 server上快速搭建docker环境的技术人员参考使用。1. 银河麒麟 v10 SP1 Server 装 Docker先确认为什么只能停在 18.09.7在银河麒麟 v10 SP1 Server 上装 Docker很多人的第一反应是直接 yum install docker-ce但大概率会在依赖解析这一步翻车要么提示找不到包要么报 nothing provides container-selinux 这种玄学错误。手册里稳定跑通的方案是锁定 docker-ce 18.09.7先配好双源再安装。这篇笔记把源配置、安装步骤、报错现场和安装后的验证全部拆开讲适合刚接手麒麟服务器、要在上面跑容器服务的运维同学也适合排查“为什么新版 Docker 在麒麟上装不动”这类问题。2. yum 源配置官方源缺 docker 包第三方源和麒麟源怎么分工银河麒麟 v10 SP1 Server 的官方源里没有 docker server 软件包这一点手册写得很直接安装只能借助第三方源。但第三方源只负责 docker-ce 本体docker-ce 启动时依赖的底层组件仍然要从麒麟官方源获取所以两张 repo 文件都要配缺一张都会在依赖检查阶段报错。很多人这里只配了一个源导致yum install docker-ce-cli时提示缺依赖包然后开始怀疑源地址没用对。2.1 动手前先确认系统版本与架构在写任何 repo 文件之前先确认系统和 CPU 架构。麒麟 v10 SP1 Server 的 aarch64 版本和 x86_64 版本的软件包不通用docker-ce 仓库的 baseurl 里写了$basearchyum 会把它展开成实际架构aarch64 就访问.../aarch64/stablex86_64 就访问.../x86_64/stable。跳过这一步直接复制网上的 x86_64 源配置后面几乎一定会遇到 404 或找不到包。cat /etc/os-release uname -m输出里重点看VERSION_ID是否为 10 SP1以及uname -m返回的是 aarch64 还是 x86_64。麒麟系统的 os-release 文件字段比 CentOS 多但VERSION_ID和PLATFORM_ID一眼就能看清主版本。架构确认后后续所有源配置都以它为准不要照搬 CentOS 8 的仓库路径——麒麟虽然兼容 CentOS 生态但仓库目录结构不完全一致。2.2 编写 docker-ce.repo第三方源的关键参数拆解确认架构没问题后在 /etc/yum.repos.d 目录下新建 docker-ce.repo。这里用的第三方源是 docker-ce 官方仓库的国内镜像节点目录结构保持和 Docker 官方一致只是访问路径换成镜像站的地址。手册里给的这份 repo 文件可以直接落盘vim /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文件里的几个参数各自管一件事。name只是仓库显示名yum repolist时会展示baseurl是真正取包的地址路径里的centos/7表示这个仓库是按 RHEL/CentOS 7 体系发布的麒麟 v10 兼容这一体系所以可以直接复用$basearch是动态变量yum 会自动替换为当前架构enabled1表示启用该仓库gpgcheck1开启 GPG 校验gpgkey指向镜像站同步下来的公钥文件。注意gpgkey的路径是镜像站的不是 Docker 官方主站的不要手动改否则公钥校验会失败。有同事问过为什么不直接配 Docker 官方仓库而是绕到镜像站。原因很直接在麒麟环境下直连官方仓库大概率在网络层就被卡住yum 会停在 downloading 阶段直到超时。镜像站至少在内网可达性上稳定得多这也是手册选择第三方源而不是官方源的原因。2.3 麒麟官方源的角色只负责依赖包第三方源负责 docker-ce 本体但它的依赖组件比如容器运行时、selinux 策略工具链等要从麒麟官方源拿。这里新建 kylin_aarch64.repo注意仓库名ks10-os-media是固定的不要改改了 yum 可能识别不到vim /etc/yum.repos.d/kylin_aarch64.repo[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这份源里的gpgcheck0是手册原文就有的意思是下载包时不检查 GPG 签名。对麒麟官方源来说内网环境这么用是常态但从安全角度有隐患如果源地址被劫持或投毒yum 不会主动拒绝坏包。在内网部署时我一般保留原样但如果你对安全等级要求高建议先手动获取公钥并开启gpgcheck1代价是每次更新要多维护一把公钥。还有一个容易忽略的点baseurl指向的是sp1-openstack-q相对路径它对应麒麟 v10 SP1 的一个 openstack 衍生源目录。这个目录里除了 openstack 相关包还维护了系统基础组件docker 18.09.7 的依赖能在这里找到是因为这套源始终在跟随 SP1 版本更新。不要用 v10 的通用源路径替换它替换后依赖版本会错位。2.4 源配完先验证repolist 和 makecache两个 repo 文件写完先别急着装包跑一遍 repolist 确认仓库被识别再跑 makecache 生成缓存。这一步能过滤掉八成配置错误yum repolist yum makecache如果 repolist 里能看到docker-ce-stable和ks10-os-media两个仓库说明 yum 已经正确读到配置。如果只看到一个说明另一个 repo 文件语法有错或路径写错。常见情况是 docker-ce.repo 里 baseurl 行多了空格或者 kylin_aarch64.repo 的gpgcheck被误写成gpgcheck1导致校验失败——虽然公钥冲突在麒麟源上很少见但一旦出现yum 会拒绝整个仓库。makecache 过程中如果报 404先检查$basearch是不是被错误地写成了硬编码架构如果报连接失败用 curl 访问一下 baseurl 地址确认网络通不通。这一步排查完源配置才算真正结束进入安装环节。3. 用 yum 锁定 18.09.7先 cli 后 ce四步装完再验证源配好之后安装环节比想象中容易翻车尤其是版本锁定和依赖顺序。手册把安装拆成两步先装docker-ce-cli-18.09.7-3.el7再装docker-ce-18.09.7-3.el7。这个顺序不是随意写的而是麒麟源环境下验证过的最稳路径。3.1 为什么先装 docker-ce-cli 而不是直接装 docker-ce常规动作是直接yum install docker-ce但在麒麟 v10 SP1 Server 上直接这么做yum 的依赖解析器可能会挑到版本更新但依赖冲突的候选包。先锁定 cli 包让它落盘相当于先把 docker 命令行工具固定下来再回头装 daemon 本体。两步走看起来多敲一条命令实际上避开了 yum 自动选择时把 cli 和 daemon 版本拉成不一致的隐患。实际踩过这样一个坑yum 自动解析时选了 cli 20.x 和 daemon 18.09.7 的混搭组合安装完成后docker version里 Client 和 Server 版本对不上排查起来非常绕。手动锁版本分两步走从根上避开这个问题。3.2 安装命令与预期输出现在执行安装。两条命令都要带完整版本号不要省略-3.el7后缀yum install docker-ce-cli-18.09.7-3.el7 yum install docker-ce-18.09.7-3.el7第一条命令执行时yum 会解析 cli 包的依赖通常包括 rootless-extras、containerd 相关组件前提是麒麟官方源配置正确且 makecache 刚跑过。执行期间会有一次确认提示输入 y 回车即可。第二条命令安装 daemon 本体会连带拉取容器运行时组件安装完成后输出里会出现Installed: docker-ce的提示。如果第二条命令也报nothing provides container-selinux先停止安装回到第 2 章检查麒麟源是否启用。这个报错本质上是新版 docker 的依赖要求18.09.7 并不强制那么高版本的 container-selinux。出现这个报错说明版本锁得不够死yum 解析时又往新版跑了。3.3 启动 docker 并确认版本安装完成之后启动服务并验证版本systemctl start docker docker --version预期输出是Docker version 18.09.7, build 2d0083d。systemctl start在麒麟上使用 systemd 标准 unit 文件启动过程会拉起 dockerd 守护进程并创建 /var/run/docker.sock socket 文件。docker --version输出版本号只证明客户端二进制能跑不代表守护进程工作正常所以还要做下一步检查。3.4 确认服务和 socket 状态这一步容易被跳过但恰恰是出问题最多的地方。执行下面两条命令systemctl status docker ls -l /var/run/docker.socksystemctl status输出里Active状态必须是active (running)如果显示failed或者active (exited)说明 dockerd 启动后立即退出了原因通常是存储驱动不兼容或 selinux 策略拦截这在第 4 章专门排查。socket 文件存在说明客户端和守护进程之间的通信通道已建立ls -l能看到文件类型是s也就是 socket 类型不是普通文件。确认这两点后Docker 才算真正进入可用状态。4. 安装过程常见问题与避坑四条现场报错解决记录源配置和安装步骤是直线流程但实际执行时问题都出在细节上。这一章把手册里提到的报错和我自己踩过的坑整理成四条记录每条按现象、原因、解决三个部分写方便对号入座直接处理。4.1 安装新版 docker-ce 报 nothing provides container-selinux现象执行yum install docker-ce不带版本号yum 解析到最后输出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而麒麟 v10 SP1 官方源里该组件版本停留在更低版本无法满足这个约束。yum 在安装阶段就拒绝继续因为它无法找到合法的依赖组合。注意这里报错的包名是docker-ce-3:20.10.17-3.el7.aarch643:是 epoch 号aarch64 是架构都说明 yum 解析到的是最新候选包。解决不要在麒麟系统上硬装最新版 docker直接把版本锁定到 18.09.7-3.el7。18.09.7 的依赖条件比 20.10.17 宽松很多麒麟源能完整满足。执行时两条命令都带完整版本号不要偷懒写docker-ce-18.09.7写完用yum info docker-ce-18.09.7-3.el7确认仓库里存在这个具体版本再装。4.2 源配置了却提示 No package docker-ce available现象两个 repo 文件都建好了执行yum install docker-ce-cli-18.09.7-3.el7却提示没有可用软件包甚至yum search docker搜不到任何 docker 相关包。原因最常见的是 docker-ce.repo 的enabled参数被写成enabled0或者文件名后缀不是.repo导致 yum 不读取。另一类是 baseurl 中的$basearch在编辑时被手动替换成了空字符串或错误架构仓库访问 404 后 yum 自动丢弃该仓库。解决先执行yum repolist all查看仓库是否在列表里再看docker-ce-stable的启用状态是不是 disabled。确认文件后缀为.repo用cat -A检查 repo 文件里是否有不可见控制字符。$basearch保持变量形式不要手动替换yum 会自动展开。4.3 加 --nobest 硬闯新版依赖装了等于白装现象有人尝试用yum install docker-ce --nobest跳过依赖校验安装 20.10.17安装命令走完了但运行容器时直接失败docker run hello-world拉取镜像成功却起不来容器。原因--nobest会容忍依赖不满足继续安装但缺失的 container-selinux 并不会因为安装成功就自动出现。dockerd 启动时读取系统安全策略失败容器创建被阻断表现为镜像拉下来了但 run 阶段报错退出。解决删除已安装的 docker 包命令是yum remove docker-ce docker-ce-cli然后回到第 3 章按锁定版本步骤重装。这个场景没有后悔药如果在生产环境执行了--nobest务必先把 docker 相关包全部清理干净再重装不要直接在旧包上叠加安装。4.4 systemctl start docker 启动失败journal 里没有明显报错现象systemctl start docker执行后状态显示 failedjournalctl日志里只看到 overlay2 相关关键字没有明确的 error 信息。这种情况最让人头疼因为报错不指向具体组件。原因麒麟内核默认支持 overlay2但部分内核补丁或安全模块会和 overlay2 存储驱动冲突导致 dockerd 初始化存储驱动失败。这是麒麟上装 Docker 最隐蔽的坑之一报错信息不直接容易被误判成 selinux 问题。解决先执行journalctl -xe拉取完整日志确认关键字是 overlay2 还是 selinux如果是 overlay2在 /etc/docker/daemon.json 中显式指定存储驱动为 vfs 先跑通业务之后升级内核到麒麟官方维护的版本再切回 overlay2。如果是 selinux 拦截根据你们的安全策略决定是否放行 docker 相关进程不建议无脑关闭 selinux。5. 装完不代表能用镜像加速、hello-world 与开机自启docker 装好只是第一步真正能跑起来还要做三件事配置镜像加速、验证完整容器链路、设置开机自启。镜像加速解决拉取超时hello-world 验证链路贯通开机自启避免服务器重启后 docker 不在了。这三件事做完安装才真正收口。5.1 配置镜像加速daemon.json 的写法与参数docker 默认从 Docker Hub 拉镜像这个行为在麒麟服务器所在的网络环境里经常超时。配置镜像加速是安装后的第一件事原理是让 dockerd 拉镜像时优先访问可达的镜像仓库缓存节点。修改 /etc/docker/daemon.jsonvim /etc/docker/daemon.json{ registry-mirrors: [https://your-internal-registry.example.com] }registry-mirrors是数组可以配多个地址dockerd 拉镜像时会依次尝试。这里给的是占位地址实际部署时填你们内网搭建的镜像仓库地址或者团队统一维护的加速节点。改完配置必须重启才会生效systemctl daemon-reload systemctl restart docker注意 daemon.json 必须是合法 JSON很多人在这里翻车行尾少逗号或引号用了中文全角dockerd 直接拒绝解析并报错。校验可以用python3 -m json.tool /etc/docker/daemon.json输出没有异常再重启。重启后再用docker info确认 registry-mirrors 配置已生效。5.2 用 hello-world 验证一条完整链路镜像加速配好后跑一遍 hello-world 验证 docker 的拉取、创建、执行全链路docker run hello-world首次执行会先从配置的 mirror 地址查找 hello-world 镜像没有命中会回源拉取输出里出现Hello from Docker!说明整个链路是通的。如果卡在unable to find image或dial tcp超时先检查内网能否访问镜像仓库地址再查 DNS 配置。这一步和 yum 源是两套网络路径经常出现 yum 能装包但 docker 拉不到镜像的情况不要混为一谈。5.3 设置开机自启与日常管理命令服务器重启后想让 docker 自动拉起执行systemctl enable docker日常用得最多的管理命令按使用频次列一张简表命令用途docker ps查看运行中的容器加 -a 看全部容器docker images查看本地镜像列表docker logs 容器名/ID查看容器日志docker inspect 容器名/ID查看容器或镜像的详细配置其中docker inspect最容易被低估容器的挂载点、网络模式、entrypoint 都能通过它看到结构化信息排查诡异问题时基本靠它。docker ps加-a能看到已退出容器的状态码这个状态码对判断容器为什么挂掉非常关键。6. 备用方案与体检离线 rpm 应急安装和 docker info 检查yum 源依赖外部网络内网环境或镜像站故障时安装会直接卡住。提前把 rpm 包下载到一个目录离线安装是最后的兜底方案。需要准备的包主要是 docker-ce、docker-ce-cli 以及配套的 containerd.io下载时用和 18.09.7 配套的版本不要混搭更高版本。yum install --downloadonly --downloaddir/data/docker-rpm docker-ce-18.09.7-3.el7 docker-ce-cli-18.09.7-3.el7离线机器上执行安装时依赖检查由 rpm 自己完成文件缺失会直接报error: Failed dependencies缺哪个包就看哪一行然后从另一台相同架构的机器上拷对应 rpm 过去。注意--downloadonly需要 yum-plugin-downloadonly 插件有些麒麟环境没默认安装装不上就先yum install yum-plugin-downloadonly。安装完成后用docker info做一次标准体检重点看两行docker info | grep -E Storage Driver|Cgroup DriverStorage Driver应该显示 overlay2如果显示 vfs 说明之前踩过存储驱动坑容器性能会明显下降只能做临时应急Cgroup Driver应该显示 systemd如果不是 systemd容器资源限制会和 systemd 管理冲突跑复杂编排时会出现奇怪问题。这两项都正常再跑一次 hello-world 和systemctl status docker才算真正收工。那次在生成环境上直接装了最新版 docker-ce结果依赖解析全乱最后只能清包重装整个晚上都在折腾 rpm 依赖。从那以后我每次装完都强制走一遍docker info加 hello-world 双验证缺一个都不放心。这个习惯帮我提前发现了很多隐患希望帮到你。本文还有配套的精品资源点击获取
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表