简介《银河麒麟v10 sp1 server安装docker手册》是一份面向国产化服务器运维人员的实操指南重点解决银河麒麟v10 sp1系统官方源缺少docker-server软件包、容器环境难以顺利部署的问题。资源仅含1个docx文档压缩包约17KB内容精炼却覆盖完整安装链路目录条理清晰便于按步骤查阅。文档以步骤化方式展开条理清晰先说明官方源中没有docker server需要新建/etc/yum.repos.d/docker-ce.repo并写入阿里云docker-ce源同时配置麒麟官方aarch64源以解决依赖随后依次执行yum install docker-ce-cli-18.09.7-3.el7和yum install docker-ce-18.09.7-3.el7再通过systemctl start docker启动用docker --version确认安装结果。针对安装最新版时因缺少container-selinux依赖而失败的情况文档给出了完整报错分析说明当前只能使用18.09.7版本并给出避坑建议。目前已有7109人学习下载适合需要在银河麒麟v10 sp1 server的ARM架构环境中快速搭建docker、避开版本依赖坑并希望了解版本兼容性选择的运维与实施人员。1. 银河麒麟 v10 SP1 server 装不上 docker问题大多不在 docker在国产化服务器上做应用交付绕不开银河麒麟 v10 SP1 server 这套系统。直接翻 CentOS 的 docker 安装教程来操作大概率会在 repo 阶段就卡住要么dnf install docker-ce报找不到包要么装完docker run时内核模块和防火墙状态又给出各种奇怪的错误。这个标题真正要解决的不是“敲哪几条命令”而是“银河麒麟 v10 SP1 上装 docker 的完整路径”以及每步出问题时看哪里、怎么改。下面是给首次接触这套环境的人一份可以直接抄、也能照着排查的流程从源、内核、存储驱动到 systemd 限制一起讲完。2. 安装前先把银河麒麟 v10 SP1 的底子摸清系统版本、软件源与内核设置2.1 先确认系统的真实身份别急着敲 dnf银河麒麟 v10 SP1 server 的系统和 CentOS 兼容层分几种情况有的基础是 el8少数是老一点的 el7 内核。用鼠标在图形界面点“关于”不靠谱SSH 上去看最稳。我一般会先跑这一段cat /etc/os-release cat /etc/redhat-release uname -r dnf --version | head -n 1观察点有两个。一是REDHAT_SUPPORT_PRODUCT_VERSION或VERSION_ID它决定了后续 repo 文件里$releasever会被替换成 8 还是 7二是uname -r给出的内核版本银河麒麟 v10 SP1 常见的是 4.19.x这个内核跑 Docker CE 的 overlay2 完全够用不需要专门去升级内核。dnf --version则是确认这个系统的包管理器确实是 dnf 体系后面所有安装命令都靠它。2.2 软件源怎么处理不盲目替换系统源只加 docker 的安装源很多人装不上 docker 的第一道坎是把系统的基础源整个换成 CentOS 的换完以后 dnf 元数据和麒麟自带的 rpm 包版本对不上越修越乱。正确做法是不动麒麟源单独给 docker-ce 写一个 repo 文件。注意麒麟的 dnf 对$releasever的解析在部分 SP 版本里有问题替换出来是空的所以 repo 的 baseurl 里我建议把版本号写死不依赖变量cp -a /etc/yum.repos.d /etc/yum.repos.d.bak.$(date %F) cat /etc/yum.repos.d/docker-ce.repo EOF [docker-ce-stable] nameDocker CE Stable baseurlhttps://你的内网或可达镜像源/linux/centos/8/$basearch/stable enabled1 gpgcheck1 gpgkeyhttps://你的内网或可达镜像源/linux/centos/gpg EOF dnf clean all dnf makecachebaseurl 里写8而不是$releasever是为了避开银河麒麟 v10 SP1 的版本号输出格式和 CentOS 不一致的问题。如果你的环境是 el7 内核那套就把8改成7。gpgcheck1保持开启密钥地址要和 baseurl 同源否则dnf makecache会报 GPG key 错误。2.3 内核模块、转发开关与防火墙三个最容易埋雷的点dokcer 依赖的内核能力在标准内核里都有但银河麒麟 server 的裁剪版可能没启用。安装前把这段跑一遍modprobe overlay modprobe br_netfilter cat /etc/sysctl.d/99-docker.conf EOF net.ipv4.ip_forward 1 net.bridge.bridge-nf-call-iptables 1 EOF sysctl --system systemctl status firewalld --no-pagernet.ipv4.ip_forward不打开容器里的服务映射到宿主机后外部访问不通bridge-nf-call-iptables不打开宿主机防火墙规则无法作用于 bridge 网络上的容器流量。overlay和br_netfilter这两个模块加载后可以用lsmod | grep overlay验证缺哪个就modprobe补哪个。银河麒麟 v10 SP1 server 默认会启动 firewalld。docker 安装后会自行写入 iptables 规则理论上不需要额外放行但如果你的安全基线要求宿主机防火墙保持开启并拒绝未授权端口容器映射的端口建议显式放行。另外检查一下 SELinux 的状态getenforce如果输出Enforcing容器挂载本地目录时可能出现权限拒绝。常见做法是改成permissive有合规要求的环境则用chcon -Rt container_file_t给具体目录放行不要全局关闭 SELinux。3. 银河麒麟 v10 SP1 上用 dnf 安装 docker-ce 的完整路径3.1 用 dnf 安装 docker-ce 的具体命令与参数说明repo 准备好之后安装本身不复杂但要注意一次把组件装齐而不是只装 docker 主包。我常用的命令dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugindocker-ce 是守护进程和 CLI 的主包docker-ce-cli 提供docker命令containerd.io 是容器运行时负责实际创建和运行容器。docker-buildx-plugin 和 docker-compose-plugin 分别是多架构构建和 compose 编排虽然标题只要求装 docker但这两个包在后续部署多容器应用时几乎必用一步到位省得以后再补。安装过程如果提示依赖冲突大多是系统的 containerd.io 或 moby-engine 版本残留。检查一下dnf list --showduplicates docker-ce能看到源里提供哪些版本。想把版本固定下来再装写成dnf install -y docker-ce-25.0.5这种形式-y参数是跳过交互确认服务器上批量执行时很有用。3.2 启动 dockerd 与服务自启验证装完不启动等于白装。启动并设置开机自启用一条命令完成systemctl enable --now docker systemctl status docker --no-pager docker versionenable --now是enable和start的组合写法比分开两条命令少一步。docker version的输出的 Client 和 Server 区块只有都显示出来了才说明守护进程正常在跑。如果只看到 Client 看不到 Server直接看journalctl -u docker --no-pager -n 50错误信息通常已经很明确比如监听 socket 失败或 overlay 挂载报错。3.3 首次运行验证不需要 hello-world用 busybox 更稳网上教程第一反映是docker run hello-world在银河麒麟的默认网络环境下拉取 hello-world 镜像可能因为镜像仓库连通性问题卡住这会让新手误以为 docker 没装好。我一般用自带仓库优先级更高的 busybox 做冒烟测试docker run --rm --name smoke busybox:1.36 echo ok--rm表示容器跑完自动删除--name smoke给容器一个固定名字方便在docker ps -a里定位。输出ok并且没有任何OCI runtime报错就说明 docker 的下载、解压、创建和运行这条链路全部通了。如果拉镜像失败先docker pull busybox:1.36单独跑一次能看到更具体的网络层报错方便判断是 DNS 问题还是到镜像仓库的路由问题。4. 装完 docker 先别急着跑容器daemon 配置与 systemd 资源限制4.1 存储驱动先锁死 overlay2避免 devicemapper 残留银河麒麟 v10 SP1 上最常见的历史包袱是以前用老脚本装过早期版本 docker/var/lib/docker里还留着 devicemapper 的文件结构。直接覆盖安装后docker info里 Storage Driver 显示的不是 overlay2容器创建时会报存储驱动的兼容错误。安装完成后第一时间检查docker info | grep -i storage driver期望值是overlay2。如果不是先把旧数据目录移走再让 docker 重新初始化systemctl stop docker mv /var/lib/docker /var/lib/docker.old systemctl start docker/var/lib/docker.old确认不需要后手动删除。overlay2依赖底层文件系统支持 d_type银河麒麟的 xfs 默认开启该项ext4 也支持不需要额外 mkfs 参数。4.2 daemon.json 的三个必配项registry 加速、日志上限、数据目录dockerd 的全局配置写在/etc/docker/daemon.json这个文件不存在就自己创建。我建议至少配三个维度{ data-root: /data/docker, storage-driver: overlay2, log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 }, exec-opts: [native.cgroupdriversystemd] }>systemctl restart docker docker info | grep -A 5 Storage Driver\|Cgroup Driver4.3 通过 systemd 限制 dockerd 本身占用的资源运维里的一个隐藏问题docker 守护进程本身也是一个 systemd 服务它的资源占用是可以通过 drop-in 配置来限制的。在某些内存受限的银河麒麟服务器上dockerd 如果因为镜像构建任务吃光内存会连累机器上其它服务。方法是在 systemd 层面对 docker 服务加限制mkdir -p /etc/systemd/system/docker.service.d cat /etc/systemd/system/docker.service.d/override.conf EOF [Service] MemoryMax2G CPUQuota50% EOF systemctl daemon-reload systemctl restart dockerMemoryMax2G是硬上限dockerd 的物理内存超过 2GB 时会被 systemd 杀掉CPUQuota50%表示最多使用一颗 CPU 的 50% 配额你有几核就乘几。这个配置对日常运行影响不大但在镜像构建或批量清理时能防止 docker 拖垮整台机器。需要放开限制时直接把这两个参数删掉再 reload 即可。4.4 非 root 用户运行 docker 的标准做法与风险边界用 root 操作 docker 确实省事但审计和权限上都不规范。把运维用户加入 docker 组是标准做法groupadd docker usermod -aG docker kylin newgrp docker docker run --rm busybox:1.36 id之后kylin用户不需要 sudo 就能执行 docker 命令。这里要明确一个边界docker 组内的用户权限等价于 root因为它可以挂载宿主机目录并执行任意命令。如果系统里有多人共管建议走根证书认证的远程 API 或直接按角色拆分机器不要把这个组给到不信任的人。5. 验证一次成功银河麒麟 v10 SP1 上 docker 的检查命令与故障定位5.1 安装完成后的系统级验证命令序列安装完成后不要只跑一次docker ps就认为大功告成把整套环境状态用一条命令打出来对照docker version docker info | grep -E Storage Driver|Cgroup Driver|Docker Root Dir|Server Version docker run --rm --name net-test busybox:1.36 ping -c 4 127.0.0.1docker version看 Client 和 Server 的版本是否能对上两者差距过大会出现 API 兼容问题。docker info的 Storage Driver 必须显示overlay2Cgroup Driver 必须显示systemdDocker Root Dir 应该指向你配置的>systemctl stop docker systemctl disable docker dnf remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin rm -rf /var/lib/docker /etc/docker /etc/systemd/system/docker.service.ddnf remove列出的几个包要和第 3.1 节安装的包一一对应漏掉containerd.io的话系统里会残留一个非 docker 管理的容器运行时下次安装时又会冲突。删除目录时注意/var/lib/docker如果配置了独立的 style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;" />