在国产化替代浪潮下,越来越多的项目需要部署在 银河麒麟操作系统 + 海光 CPU 架构 的信创服务器上。然而,这类环境往往存在:

  • 无法直连外网(Docker Hub 被屏蔽)
  • wget/curl SSL 连接异常
  • 用户权限与家目录配置混乱
  • RPM 包依赖冲突

本文记录了我在 银河麒麟 V10 + 海光 C86 架构 服务器上成功部署 Docker 20.10.21 的完整过程,并总结了多个“血泪教训”,帮助后来者少走弯路。


🧱 一、为什么选择 Docker 20.10.21?

版本

问题

Docker ≥ 24.x

依赖 docker-scan-pluginrootless-extras 等插件,在信创环境常 404

Docker 20.10.21

✅ 无强制插件依赖
✅ 兼容 CentOS 7 RPM 包
✅ 支持 GPU(vLLM/Qwen 部署验证通过)

⚠️ 切勿盲目使用最新版!稳定、低依赖的老版本更适合信创环境


🔧 二、完整安装步骤(离线 + 国内镜像)

1️⃣ 下载 RPM 包(使用华为云镜像站)

由于 download.docker.com 被防火墙拦截,改用 华为开源镜像站(国内可直连):

cd /tmp
sudo curl -LO https://mirrors.huaweicloud.com/docker-ce/linux/centos/7/x86_64/stable/Packages/containerd.io-1.6.21-3.1.el7.x86_64.rpm
sudo curl -LO https://mirrors.huaweicloud.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-20.10.21-3.el7.x86_64.rpm
sudo curl -LO https://mirrors.huaweicloud.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-20.10.21-3.el7.x86_64.rpm

✅ 华为镜像对信创环境兼容性最佳,且保留历史版本。


2️⃣ 卸载旧版 containerd(关键!)

如果之前安装过其他版本(如 1.6.24),必须先卸载:

# 查看已安装包
rpm -qa | grep containerd

# 强制卸载(忽略依赖)
sudo rpm -e --nodeps containerd.io

❌ 否则会报错:containerd 与 containerd.io-1.6.21 冲突


3️⃣ 安装 Docker(跳过非必要依赖)

# 先装 containerd
sudo rpm -ivh containerd.io-1.6.21-3.1.el7.x86_64.rpm

# 再装 CLI 和 CE(跳过插件依赖)
sudo rpm -ivh --nodeps docker-ce-cli-20.10.21-3.el7.x86_64.rpm
sudo rpm -ivh --nodeps docker-ce-20.10.21-3.el7.x86_64.rpm

💡 --nodeps 只跳过 docker-scan-plugin 等非运行必需组件,不影响容器功能


4️⃣ 启动服务

sudo systemctl daemon-reload
sudo systemctl enable --now docker

🛑 三、常见“坑”及解决方案

❌ 坑 1:GnuTLS: 在 pull 函数中出错(wget 失败)

原因:银河麒麟默认 wget 使用 GnuTLS,与 AWS CloudFront TLS 不兼容。
解决不要用 wget,改用 curl 或直接从华为/阿里镜像下载。


❌ 坑 2:Could not chdir to home directory /home/yb: 权限不够

原因

  • /home 目录权限被设为 770(仅 root 和特定组可访问)
  • 用户家目录属主错误(曾用 sudo 操作导致)

修复

# 修复 /home 权限(标准应为 755)
sudo chmod 755 /home

# 重建家目录
sudo rm -rf /home/yb
sudo mkdir /home/yb
sudo chown 1003:1003 /home/yb  # 替换为你的 UID:GID
sudo chmod 755 /home/yb

🔔 执行后必须重新 SSH 登录,否则 shell 环境不生效。


❌ 坑 3:permission denied on /var/run/docker.sock

原因:用户未加入 docker 组。
解决

sudo usermod -aG docker yb
newgrp docker  # 或重新登录

❌ 坑 4:connection refused 访问 Docker Hub

原因:内网防火墙完全屏蔽外联。
终极方案离线加载镜像

# 在外网机器执行
docker save hello-world > hello-world.tar

# 拷贝到信创服务器后
docker load < hello-world.tar
docker run --rm hello-world

✅ 所有大模型部署(如 vLLM)均可采用此方式离线加载镜像。


❌ 坑 5:旧用户残留导致 UID 冲突

现象:删除用户后重建同名用户,但家目录属主仍为旧 UID。
解决:彻底删除 /home/yb 并重建,确保 chown 使用当前 UID。


🌐 四、(可选)配置国内镜像加速器

若网络允许部分外联,可配置加速器:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<'EOF'
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}
EOF
sudo systemctl restart docker

⚠️ 注意:部分信创环境即使配置加速器仍无法拉取,离线方案最可靠


✅ 五、验证安装成功

$ docker --version
Docker version 20.10.21, build baeda1f

$ docker run --rm hello-world
Hello from Docker!
This message shows your installation appears to be working correctly.

🚀 六、后续建议:部署大模型(如 Qwen2.5-14B)

  1. 在外网机器拉取 vllm/vllm-openai:v0.4.3
  2. docker save 导出 tar 包
  3. 拷贝到麒麟服务器并 docker load
  4. 运行:
docker run --gpus all \
  -v /path/to/model:/model \
  -p 8000:8000 \
  vllm/vllm-openai:v0.4.3 \
  --model /model/Qwen2.5-14B-Instruct

📌 总结

在信创环境中部署 Docker,核心原则是:

“离线优先、老版本稳定、权限先行、镜像本地化”

通过本文方法,你可以在 无外网、高安全、国产 CPU+OS 环境下,快速搭建可靠的 Docker 运行时,为 AI 模型部署打下坚实基础。


欢迎点赞、收藏、评论交流!
如果你也在信创环境踩过坑,欢迎在评论区分享你的经验!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐