银河麒麟 v10 SP1 安装 Docker 完整指南:从源配置到故障排查
2026/9/23 21:40:38 网站建设 项目流程

简介:《银河麒麟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_VERSIONVERSION_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] name=Docker CE Stable baseurl=https://你的内网或可达镜像源/linux/centos/8/$basearch/stable enabled=1 gpgcheck=1 gpgkey=https://你的内网或可达镜像源/linux/centos/gpg EOF dnf clean all dnf makecache

baseurl 里写8而不是$releasever,是为了避开银河麒麟 v10 SP1 的版本号输出格式和 CentOS 不一致的问题。如果你的环境是 el7 内核那套,就把8改成7gpgcheck=1保持开启,密钥地址要和 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-pager

net.ipv4.ip_forward不打开,容器里的服务映射到宿主机后外部访问不通;bridge-nf-call-iptables不打开,宿主机防火墙规则无法作用于 bridge 网络上的容器流量。overlaybr_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-plugin

docker-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 version

enable --nowenablestart的组合写法,比分开两条命令少一步。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.cgroupdriver=systemd"] }

>systemctl restart docker docker info | grep -A 5 "Storage Driver\|Cgroup Driver"

4.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] MemoryMax=2G CPUQuota=50% EOF systemctl daemon-reload systemctl restart docker

MemoryMax=2G是硬上限,dockerd 的物理内存超过 2GB 时会被 systemd 杀掉;CPUQuota=50%表示最多使用一颗 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.1

docker version看 Client 和 Server 的版本是否能对上,两者差距过大会出现 API 兼容问题。docker info的 Storage Driver 必须显示overlay2,Cgroup Driver 必须显示systemd,Docker 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.d

dnf remove列出的几个包要和第 3.1 节安装的包一一对应,漏掉containerd.io的话,系统里会残留一个非 docker 管理的容器运行时,下次安装时又会冲突。删除目录时注意/var/lib/docker如果配置了独立的 style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;" />

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询