离线环境 Docker + Ollama + GGUF 模型部署
1. 准备离线安装包
在一台能联网的同架构(x86_64)机器上下载所有必需的文件。
| 文件名 | 说明 | 获取方式 |
|---|---|---|
docker-26.1.3.tgz |
Docker 静态二进制包 | 从 Docker 官方发布页 下载 |
docker-compose-linux-x86_64 |
Docker Compose 二进制文件 | 从 GitHub Releases 下载 |
ollama.tar |
Ollama Docker 镜像 | 使用 docker pull ollama/ollama:latest 和 docker save 命令导出 |
Qwen3-Embedding-0.6B-Q4_K_M.gguf |
GGUF 格式模型文件 | 从 ModelScope 魔搭社区 下载 |
docker.service |
systemd 服务文件 | 参考下文内容创建 |
daemon.json |
Docker 配置文件 | 参考下文内容创建 |
docker-installer.sh |
Docker 安装脚本 | 参考下文内容创建 |
docker-uninstaller.sh |
Docker 卸载脚本 | 参考下文内容创建 |
将上述所有文件放入一个文件夹(如 ollama-offline/),并拷贝到目标服务器的 /root/ 或任意工作目录。
2. 安装 Docker
2.1 创建 systemd 服务文件
创建 /usr/lib/systemd/system/docker.service,内容如下:
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target docker.socket
[Service]
Type=notify
EnvironmentFile=-/run/flannel/docker
WorkingDirectory=/usr/local/bin
ExecStart=/usr/bin/dockerd \
-H tcp://0.0.0.0:4243 \
-H unix:///var/run/docker.sock \
--selinux-enabled=false \
--log-opt max-size=1g
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
2.2 创建 Docker 配置文件
创建 /etc/docker/daemon.json,内容如下:
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"debug": false,
"experimental": false,
"features": {
"buildkit": true
},
"insecure-registries": [],
"registry-mirrors": []
}
2.3 执行安装脚本
# docker-installer.sh
#!/bin/sh
echo 'docker开始安装...'
echo '解压tar包...'
# ------------------------------------
tar -zxvf ./docker-28.5.2.tgz
# ------------------------------------
echo '将docker目录移到/usr/bin目录下...'
cp -p docker/* /usr/bin/
rm -rf docker
echo '将docker.service 移到/usr/lib/systemd/system/ 目录...'
cp ./docker.service /usr/lib/systemd/system/
echo '重新加载配置文件...'
mkdir /etc/docker/
cp daemon.json /etc/docker/
systemctl daemon-reload
echo '启动docker...'
systemctl start docker
echo '设置开机自启...'
systemctl enable docker.service
if ! docker -v; then
echo "docker 安装失败..."
exit -1
fi
echo 'docker安装成功...'
echo '安装docker-compose...'
# ---------------------------------------------------------------
cp -f ./docker-compose-linux-x86_64 /usr/local/bin/docker-compose
# ---------------------------------------------------------------
echo '添加文件执行权限...'
chmod +x /usr/local/bin/docker-compose
if ! docker-compose -v; then
echo "docker-compose 安装失败..."
exit -1
fi
echo 'docker-compose 安装成功...'
cd /root/ollama-offline
sh docker-installer.sh
2.4 启动 Docker 服务
systemctl daemon-reload
systemctl start docker
systemctl enable docker.service
docker --version # 验证安装
docker-compose --version
4. 加载并运行 Ollama 容器
4.1 加载 Docker 镜像
docker load -i ollama.tar
4.2 启动 Ollama 容器(绑定挂载)
我们将宿主机的 /home/.ollama 目录挂载到容器内的模型存储路径,便于管理。
docker run -d \
-v /home/.ollama:/root/.ollama \
-p 11434:11434 \
--name ollama \
ollama/ollama:latest
说明:
-v /home/.ollama:/root/.ollama:将模型数据持久化到宿主机的/home/.ollama目录。-p 11434:11434:映射 API 端口。
验证容器是否运行:
docker ps | grep ollama
5. 导入离线 GGUF 模型
5.1 将 GGUF 文件拷贝到容器
docker cp ./Qwen3-Embedding-0.6B-Q4_K_M.gguf ollama:/root/
5.2 进入容器创建 Modelfile
docker exec -it ollama /bin/bash
cd /root
创建 Modelfile:
echo "FROM ./Qwen3-Embedding-0.6B-Q4_K_M.gguf" > Modelfile
5.3 导入模型
ollama create qwen3-embedding -f Modelfile
注意:此版本 Ollama 不支持 PARAMETER embedding 参数,无需添加。
5.4 验证模型
ollama list # 应看到 qwen3-embedding 在列表中
6. 测试 Embedding 模型
在容器内或宿主机上通过 API 调用,获取文本向量。
curl http://localhost:11434/api/embeddings -d '{
"model": "qwen3-embedding",
"prompt": "这是一段测试文本"
}'
预期输出:一个 JSON 对象,包含该文本对应的向量数组(例如 "embedding": [0.123, -0.456, ...])。
[root@localhost qwen3-embedding]# curl http://localhost:11434/api/embeddings -d '{
> "model": "qwen3-embedding",
> "prompt": "这是一段测试文本"
> }'
{"embedding":[-0.0026231887750327587,-0.07351969182491302...-0.044338155537843704,-0.003932561259716749]}

浙公网安备 33010602011771号