暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

海光 + 麒麟 V10 SP3 离线部署 Docker / Mopheus 总结

原创 6ps 3天前
64

海光 + 麒麟 V10 SP3 离线部署 Docker / Mopheus 总结

一、环境确认

服务器环境最终确认:

硬件:        曙光服务器 / 海光 Hygon C86
CPU架构:     x86_64
操作系统:    银河麒麟 Server V10 SP3 2403
ISO:         Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso
glibc:       2.28
Kernel:      4.19.90
systemd:     243-67

检查命令:

cat /etc/os-release
uname -m
uname -r
rpm -q glibc
rpm -q systemd
lscpu

架构判断

海光 CPU 兼容 x86-64 指令体系。

因此:

C86 / Hygon
    ↓
x86_64
    ↓
软件包通常标记为 amd64 / x86_64

所以 Mopheus 应选择:

mopheus-install-v2.2.2-linux-amd64.tar.gz    √
mopheus-install-v2.2.2-linux-arm64.tar.gz    ×

从基础组件来看,麒麟 V10 SP3 与 RHEL/CentOS 8 这一代更接近:

组件 麒麟 V10 CentOS 7 RHEL 8
glibc 2.28 2.17 2.28
Kernel 4.19.90 3.10 4.18
systemd 243 219 239

因此遇到第三方软件只有 RHEL/CentOS 分类时,通常优先参考 RHEL 8 / CentOS 8,但不能认为二进制/RPM 100%兼容。


二、使用麒麟 ISO 建立离线 YUM 源

由于服务器属于离线环境,需要使用安装 ISO 解决系统 RPM 依赖。

假设 ISO:

/root/Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso

创建挂载目录:

mkdir -p /mnt/kylin

挂载:

mount -o loop \
/root/Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso \
/mnt/kylin

检查:

ls /mnt/kylin

确认 ISO 中存在:

repodata/

三、配置 ISO YUM Repository

备份原来的 repo:

mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/

创建:

vi /etc/yum.repos.d/kylin-iso.repo

内容:

[kylin-iso]
name=Kylin V10 SP3 2403 ISO
baseurl=file:///mnt/kylin
enabled=1
gpgcheck=0

重新生成缓存:

yum clean all
yum makecache
yum repolist

测试:

yum list available | head

至此:

Kylin ISO
   ↓
/mnt/kylin
   ↓
file:///mnt/kylin
   ↓
yum

离线 YUM 源建立完成。


四、发现 ISO 自带 Docker 版本过低

Mopheus 要求:

Docker Engine >= 20.10

通过 ISO YUM 源查询:

yum list available | grep -i docker

发现:

docker-engine.x86_64
1:18.09.0-261.p02.ky10

即:

ISO Docker Engine = 18.09
Mopheus 要求       >= 20.10

18.09 < 20.10

结论

不能直接使用麒麟 ISO 自带 Docker。

但是 ISO YUM 源继续保留,用于解决其他系统依赖。


五、第一次尝试:Docker CE 26 RPM

mopheus 自带的离线docker 不合适:

containerd.io-1.6.33-3.1.el7.x86_64.rpm
docker-buildx-plugin-0.14.1-1.el7.x86_64.rpm
docker-ce-26.1.4-1.el7.x86_64.rpm
docker-ce-cli-26.1.4-1.el7.x86_64.rpm
docker-ce-rootless-extras-26.1.4-1.el7.x86_64.rpm
docker-compose-plugin-2.27.1-1.el7.x86_64.rpm

这里存在一个潜在问题:

*.el7.x86_64.rpm

属于 EL7 RPM,而麒麟 V10 更接近 RHEL8 技术栈。


六、问题一:containerd.io 与麒麟 docker-runc 冲突

安装:

yum install ./containerd.io*.rpm

出现冲突:

docker-runc-1.0.0.rc3-222.ky10.x86_64

与

containerd.io-1.6.33-3.1.el7.x86_64

冲突。

原因是:

麒麟已经安装 docker-runc
           ↓
containerd.io 自己也提供 runc
           ↓
RPM package conflict

因此不能让两套 runc 共存。

处理时需要检查:

rpm -qa | grep -Ei 'docker|containerd|runc'

确认旧组件关系后移除冲突的旧 docker-runc,再安装 containerd.io

最终:

containerd.io 1.6.33    √ 安装成功

七、问题二:Docker CE 26 缺少 rootless 依赖

随后执行类似:

yum install ./docker-*

结果部分组件安装成功:

docker-ce-cli           26.1.4     √
docker-buildx-plugin    0.14.1     √
docker-compose-plugin   2.27.1     √
containerd.io           1.6.33     √

但真正的:

docker-ce               ×

没有成功。

原因是依赖:

docker-ce
   ↓
docker-ce-rootless-extras
   ↓
fuse-overlayfs >= 0.7
slirp4netns >= 0.4

尝试:

yum install fuse-overlayfs slirp4netns

但麒麟 V10 SP3 ISO 本地源提示:

No match / 找不到软件包

说明 ISO 中没有这两个依赖。


八、为什么 docker --version 显示 26,却不能用

此时执行:

docker --version

能够看到:

Docker version 26.1.4

一开始容易误认为 Docker 已经安装成功。

实际上这只能说明:

Docker CLI 26.1.4    √

不能证明:

Docker Engine        √

继续执行:

docker info

出现:

Cannot connect to the Docker daemon at
unix:///var/run/docker.sock.

Is the docker daemon running?

并检查:

rpm -q docker-ce
which dockerd

确认:

docker-ce       未安装
dockerd         不存在

结论

当时的实际状态:

docker CLI             26.1.4    √
Buildx                 0.14.1    √
Compose                2.27.1    √
containerd.io          1.6.33    √

Docker Engine/dockerd             ×
docker.service                    ×

因此 不满足 Mopheus 的 Docker Engine ≥20.10 要求

以后判断 Docker 是否安装成功,不要只运行:

docker --version

应该运行:

docker version

必须同时看到:

Client:
 Version: ...

Server:
 Engine:
 Version: ...

九、最终方案:放弃 EL7 RPM,使用 Docker 静态版

由于:

麒麟 ISO Docker = 18.09          太旧

Docker CE 26 EL7 RPM             发行版不匹配
        +
rootless 依赖缺失

因此最终决定:

使用 Docker 官方 x86_64 静态二进制版本。

选择:

Docker Engine 20.10.24

满足:

20.10.24 >= Mopheus 要求的 20.10

下载:

docker-20.10.24.tgz

十、清理 Docker 26 半成品

先检查:

rpm -qa | grep -E 'docker|containerd'

卸载之前通过 RPM 装进去的 Docker CLI 等组件:

yum remove \
docker-ce-cli \
docker-buildx-plugin \
docker-compose-plugin

不要盲目删除系统组件。

然后:

which docker
which dockerd

十一、安装 Docker 20.10.24 静态版

假设:

/root/docker/docker-20.10.24.tgz

进入:

cd /root/docker

解压:

tar -xzf docker-20.10.24.tgz

检查:

ls docker/

应该包含类似:

docker
dockerd
containerd
containerd-shim
ctr
runc
docker-proxy

复制:

cp docker/* /usr/local/bin/

验证:

/usr/local/bin/docker --version
/usr/local/bin/dockerd --version

应该看到:

Docker version 20.10.24

十二、解决 /usr/bin/docker 找不到的问题

安装静态版以后遇到:

/usr/bin/docker 找不到

但是:

/usr/local/bin/docker

实际存在。

这是因为之前 RPM 版本的 Docker 位于:

/usr/bin/docker

卸载 RPM 后该文件消失,而 shell/程序仍可能引用旧路径。

首先:

hash -r

检查:

which docker
type -a docker
echo $PATH

正常应该优先找到:

/usr/local/bin/docker

可以直接测试:

/usr/local/bin/docker --version

如果某些程序硬编码要求 /usr/bin/docker,可以建立链接:

ln -sf /usr/local/bin/docker /usr/bin/docker

然后:

hash -r
docker --version

十三、为静态 Docker 创建 systemd 服务

静态安装不会自动生成 docker.service,因此需要自己创建。

vi /etc/systemd/system/docker.service

内容:

[Unit]
Description=Docker Application Container Engine
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/local/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=always

LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity

Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target

加载:

systemctl daemon-reload

设置开机启动并立即启动:

systemctl enable --now docker

检查:

systemctl status docker

应该:

Active: active (running)

十四、最终验证 Docker

不要只运行:

docker --version

而是:

docker version

必须同时存在:

Client:
 Version: 20.10.24

Server:
 Engine:
  Version: 20.10.24

再:

docker info

不能出现:

Cannot connect to the Docker daemon

检查进程:

ps -ef | grep -E 'dockerd|containerd'

最终:

Docker Client       √
dockerd             √
containerd          √
docker.service      √
开机启动             √
Docker Engine       20.10.24

满足:

Mopheus 要求:
Docker Engine >= 20.10       √

十五、安装 Mopheus 时选择 amd64

海光 C86:

uname -m
→ x86_64

因此选择:

mopheus-install-v2.2.2-linux-amd64.tar.gz

而不是:

linux-arm64

十六、Mopheus 前台运行正常,但退出 SSH 后停止

开发调试可以:

mopheus daemon start

但 SSH 退出后不能依赖前台进程。

因此使用:

mopheus daemon install --enable --start

由于命令是普通用户执行的,生成的是:

~/.config/systemd/user/mopheus.service

而不是:

/etc/systemd/system/mopheus.service

因此管理命令也应该是:

systemctl --user status mopheus
systemctl --user start mopheus
systemctl --user stop mopheus
systemctl --user restart mopheus

十七、为什么退出 SSH 后 Mopheus 仍然停止

普通用户的:

systemd --user

默认可能跟用户登录 session 生命周期相关。

SSH:

登录
 ↓
systemd --user
 ↓
mopheus
 ↓
SSH退出
 ↓
用户session结束
 ↓
systemd --user 被回收
 ↓
Mopheus停止

解决方法是开启:

linger

十八、普通用户没有 sudo 权限怎么办

当前普通用户没有 sudo 权限,因此自己无法完成 linger 的系统级配置。

不需要给普通用户 sudo 权限。

只需要让管理员/root 执行一次

loginctl enable-linger 用户名

例如用户名:

mopheus

root 执行:

loginctl enable-linger mopheus

检查:

loginctl show-user mopheus -p Linger

应该:

Linger=yes

这一步只需要管理员操作一次。


十九、普通用户重新启动 Mopheus

开启 linger 后,普通用户自己执行:

systemctl --user daemon-reload
systemctl --user enable --now mopheus

检查:

systemctl --user status mopheus

应该:

Active: active (running)

测试退出 SSH:

exit

重新 SSH 登录:

systemctl --user status mopheus

如果依然:

Active: active (running)

说明持久化成功。

最终机制变成:

服务器启动
   │
   ├── systemd
   │
   └── systemd --user
           │
           │ Linger=yes
           │
           └── mopheus.service
                    │
                    └── Mopheus daemon

SSH 登录与否
     │
     └── 不再影响 Mopheus

二十、最终部署架构

整个环境最终可以归纳为:

曙光服务器
│
├── 海光 Hygon C86
│       └── x86_64 / amd64
│
├── 银河麒麟 V10 SP3 2403
│       ├── Kernel 4.19.90
│       ├── glibc 2.28
│       └── systemd 243
│
├── Kylin ISO
│       └── 本地 YUM Repository
│               └── 解决系统 RPM 依赖
│
├── Docker
│       ├── ISO Docker 18.09       × 不使用
│       ├── Docker CE 26 EL7 RPM   × 放弃
│       └── Docker 20.10.24 Static √
│               ├── docker
│               ├── dockerd
│               ├── containerd
│               └── systemd
│
└── Mopheus 2.2.2 amd64
        │
        └── 普通用户 systemd service
                 │
                 ├── enable
                 ├── start
                 └── Linger=yes
                         ↓
                  SSH退出继续运行

这次排障最关键的几个结论

  1. 海光 C86 = x86_64 软件架构,下载 amd64

  2. 麒麟 V10 SP3 更接近 RHEL 8 技术栈,不要因为有 RPM/YUM 就简单当 CentOS 7。

  3. 麒麟 V10 SP3 2403 ISO 自带 Docker Engine 18.09,不满足 Docker ≥20.10。

  4. docker --version 有输出不代表 Docker Engine 安装成功。

  5. 判断 Docker 是否真正可用应该使用:

    docker version
    docker info
    
  6. Docker CE 26 的 EL7 RPM 在麒麟上遇到了 docker-runc 冲突和 fuse-overlayfs/slirp4netns 缺失,因此停止继续补依赖。

  7. 最终采用 Docker 20.10.24 x86_64 静态版 + systemd,绕开 RPM 依赖问题。

  8. Mopheus 普通用户安装后属于 systemd user service

  9. enable ≠ 退出 SSH 后一定继续运行;普通用户长期运行需要 Linger=yes

  10. 普通用户没有 sudo 没关系,只需要管理员一次性执行:

    loginctl enable-linger 用户名
    

    后续 Mopheus 的启动、停止、重启都由普通用户自己通过

    systemctl --user
    

    来 管理。

最后修改时间:2026-09-03 09:40:27
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论