背景: 在完全断网的内网虚拟机(CentOS 7)上,通过 Docker 部署 DeepSeek-R1 (7B) 模型。过程中踩坑无数(磁盘爆满、内核不兼容、权限拦截),现将从 0 到 1 的全量迁移过程整理如下。


🛠️ 第一阶段:有网主机“极限打包”

痛点: 宿主机磁盘仅剩 8G,直接打包镜像会报 No space left on device

  1. 打包模型数据 (子弹): 将 Ollama 下载好的模型权重(约 4.5G)打包。使用 -C / 保持绝对路径。

    Bash

    tar -czvf /data/ollama_data.tar.gz -C / data/ollama_storage
    
  2. 管道压缩打包镜像 (枪): 避坑方案: 不要直接 docker save,利用管道流 gzip 边打边压,不产生临时文件,完美规避磁盘不足。

    Bash

    docker save ollama/ollama:latest | gzip > /data/ollama_image.tar.gz
    

📦 第二阶段:内网虚拟机“精准还原”

将两个 .tar.gz 包传到内网机 /data 目录后开始操作。

  1. 绝对路径解压: 确保路径恢复到系统的 /data/ollama_storage,防止路径套娃导致模型找不到。

    Bash

    tar -xzvf /data/ollama_data.tar.gz -C /
    
  2. 暴力赋权: 解决容器内访问宿主机目录的权限死锁。

    Bash

    chmod -R 777 /data/ollama_storage
    
  3. 导入运行环境:

    Bash

    docker load -i /data/ollama_image.tar.gz
    

🔥 第三阶段:终极点火(解决 CentOS 7 重启循环)

核心坑点: CentOS 7 内核(3.10)太老,不支持新版 Go 编译的底层指令(如 clone3),会导致容器反复重启并报 Panic 错误。

【独家启动命令】:

Bash

# 强制删除之前崩溃的容器
docker rm -f deepseek_offline

# 带有“免死金牌”参数的启动
docker run -d \
  --name deepseek_offline \
  -p 11434:11434 \
  -v /data/ollama_storage:/root/.ollama:z \
  --security-opt seccomp=unconfined \
  --restart always \
  ollama/ollama

💡 关键参数解析:

  • :z: 自动重置 SELinux 标签,解决挂载目录“Permission Denied”。

  • --security-opt seccomp=unconfined:
    
    
  • 离线部署救命参数! 允许老内核运行新指令集,彻底解决 Operation not permitted 导致的系统崩溃。


💬 第四阶段:验证对话

执行以下命令,瞬间唤醒你的私有化离线大模型:

Bash

docker exec -it deepseek_offline ollama run deepseek-r1:7b

结语: 只要思想不滑坡,办法总比困难多。这套方案完美解决了老旧服务器部署大模型的兼容性难题,亲测有效!

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐