以下是使用 docker-compose
部署 Ollama 的完整方案,适用于 麒麟服务器(Kylin OS) 或其他 Linux 系统,可避免 GLIBCXX
依赖问题:
1. 安装 Docker 和 Docker-Compose
(1)安装 Docker
bash
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
(2)安装 Docker-Compose
bash
sudo curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version # 验证安装
sudo curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version # 验证安装
2. 创建 docker-compose.yml
文件
yaml
version: '3.8'
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "11434:11434" # Ollama 默认端口
volumes:
- ./ollama_data:/root/.ollama # 持久化模型数据
restart: unless-stopped
environment:
- OLLAMA_HOST=0.0.0.0 # 允许外部访问
deploy:
resources:
limits:
cpus: '4' # 限制 CPU 核心数
memory: 16G # 限制内存
version: '3.8'
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "11434:11434" # Ollama 默认端口
volumes:
- ./ollama_data:/root/.ollama # 持久化模型数据
restart: unless-stopped
environment:
- OLLAMA_HOST=0.0.0.0 # 允许外部访问
deploy:
resources:
limits:
cpus: '4' # 限制 CPU 核心数
memory: 16G # 限制内存
关键配置说明:
volumes
:将模型数据持久化到本地目录./ollama_data
,避免容器重启后丢失。resources
:根据服务器资源调整 CPU 和内存限制(如qwen2.5vl:32b
需要至少 16GB 内存)。OLLAMA_HOST=0.0.0.0
:允许通过 IP 访问 Ollama API。
3. 启动 Ollama 服务
bash
docker-compose up -d # 后台运行
docker-compose up -d # 后台运行
查看日志:
bash
docker-compose logs -f
docker-compose logs -f
4. 使用 Ollama
(1)进入容器交互模式:
bash
docker exec -it ollama ollama run qwen2.5vl:32b
docker exec -it ollama ollama run qwen2.5vl:32b
(2)通过 HTTP API 调用:
bash
curl http://localhost:11434/api/generate -d '{
"model": "qwen2.5vl:32b",
"prompt": "你好,介绍一下你自己"
}'
curl http://localhost:11434/api/generate -d '{
"model": "qwen2.5vl:32b",
"prompt": "你好,介绍一下你自己"
}'
5. 管理模型
(1)下载新模型:
bash
docker exec -it ollama ollama pull llama3
docker exec -it ollama ollama pull llama3
(2)列出已下载模型:
bash
docker exec -it ollama ollama list
docker exec -it ollama ollama list
6. 高级配置(可选)
(1)GPU 加速(需 NVIDIA 驱动和 nvidia-container-toolkit
)
修改 docker-compose.yml
:
yaml
services:
ollama:
runtime: nvidia # 启用 GPU 支持
environment:
- NVIDIA_VISIBLE_DEVICES=all
services:
ollama:
runtime: nvidia # 启用 GPU 支持
environment:
- NVIDIA_VISIBLE_DEVICES=all
(2)自定义模型存储路径
yaml
volumes:
- /data/ollama:/root/.ollama # 指定绝对路径
volumes:
- /data/ollama:/root/.ollama # 指定绝对路径
7. 常见问题解决
问题1:端口冲突
如果 11434
端口被占用,修改 docker-compose.yml
中的端口映射:
yaml
ports:
- "11435:11434" # 主机端口:容器端口
ports:
- "11435:11434" # 主机端口:容器端口
问题2:权限错误
确保数据目录可写:
bash
mkdir -p ./ollama_data
chmod 777 ./ollama_data
mkdir -p ./ollama_data
chmod 777 ./ollama_data
8. 卸载 Ollama
bash
docker-compose down # 停止服务
rm -rf ./ollama_data # 删除模型数据(谨慎操作!)
docker-compose down # 停止服务
rm -rf ./ollama_data # 删除模型数据(谨慎操作!)
方案优势
- 隔离依赖:完全绕过系统
libstdc++
版本问题。 - 一键启停:通过
docker-compose
统一管理服务。 - 持久化存储:模型数据保存在本地,升级容器不影响已有模型。
- 资源可控:可限制 CPU/内存,避免服务器过载。
如果需要更复杂的配置(如多模型负载均衡),可以进一步扩展 docker-compose.yml
。
您的服务器已正确安装 NVIDIA 驱动(v570.172.08)和 CUDA 12.8,并且检测到 RTX A6000 GPU。现在只需正确配置 NVIDIA Container Toolkit 即可让 Docker 容器使用 GPU 加速运行 Ollama。
完整解决方案
1. 安装 NVIDIA Container Toolkit
bash
# 添加 NVIDIA 仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.repo | sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
# 安装工具包
sudo yum install -y nvidia-container-toolkit
# 配置 Docker 使用 NVIDIA 运行时
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
# 添加 NVIDIA 仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.repo | sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
# 安装工具包
sudo yum install -y nvidia-container-toolkit
# 配置 Docker 使用 NVIDIA 运行时
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
2. 验证 NVIDIA 运行时是否生效
bash
docker info | grep -i runtime
docker info | grep -i runtime
输出应包含 nvidia
,例如:
Runtimes: nvidia runc
Runtimes: nvidia runc
3. 修正 docker-compose.yml
yaml
version: "3.9"
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "11434:11434"
volumes:
- ./ollama/data:/root/.ollama
restart: always
environment:
- NVIDIA_VISIBLE_DEVICES=all # 允许容器访问所有 GPU
- OLLAMA_HOST=0.0.0.0 # 开放 API 访问
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1 # 使用 1 块 GPU
capabilities: [gpu] # 启用 GPU 支持
version: "3.9"
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "11434:11434"
volumes:
- ./ollama/data:/root/.ollama
restart: always
environment:
- NVIDIA_VISIBLE_DEVICES=all # 允许容器访问所有 GPU
- OLLAMA_HOST=0.0.0.0 # 开放 API 访问
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1 # 使用 1 块 GPU
capabilities: [gpu] # 启用 GPU 支持
关键改动:
- 移除
privileged: true
(除非必要,否则不安全)。 - 移除
runtime: nvidia
(已通过全局配置生效)。 - 添加
deploy.resources
显式声明 GPU 资源(兼容性更好)。
4. 启动服务并验证 GPU
bash
docker-compose up -d
docker exec -it ollama nvidia-smi
docker-compose up -d
docker exec -it ollama nvidia-smi
应输出与宿主机相同的 GPU 信息(RTX A6000)。
常见问题排查
问题1:nvidia-ctk
命令未找到
bash
sudo yum reinstall nvidia-container-toolkit
sudo yum reinstall nvidia-container-toolkit
问题2:麒麟系统兼容性
如果报错 libnvidia-container not compatible with Kylin
,需手动安装适配版本:
bash
# 下载麒麟适配的包(需从厂商获取)
wget https://example.com/kylin/nvidia-container-toolkit.rpm
sudo rpm -ivh nvidia-container-toolkit.rpm
# 下载麒麟适配的包(需从厂商获取)
wget https://example.com/kylin/nvidia-container-toolkit.rpm
sudo rpm -ivh nvidia-container-toolkit.rpm
问题3:Ollama 未使用 GPU
在容器内运行:
bash
docker exec -it ollama bash
ollama run qwen2.5vl:32b
docker exec -it ollama bash
ollama run qwen2.5vl:32b
输入 /info
检查是否显示 GPU 信息。
性能优化建议
- 启用 CUDA 加速:
确保模型加载时显示Using CUDA GPU
。 - 限制 GPU 内存:
在docker-compose.yml
中添加:yamlenvironment: - NVIDIA_DRIVER_CAPABILITIES=compute,utility - NVIDIA_REQUIRE_CUDA="cuda>=12.8"
environment: - NVIDIA_DRIVER_CAPABILITIES=compute,utility - NVIDIA_REQUIRE_CUDA="cuda>=12.8"
- 多 GPU 分配:
修改count: 1
为实际 GPU 数量。
最终验证
bash
# 查看容器日志
docker-compose logs -f ollama
# 测试模型推理速度
curl http://localhost:11434/api/generate -d '{
"model": "qwen2.5vl:32b",
"prompt": "GPU 是否正常工作?"
}'
# 查看容器日志
docker-compose logs -f ollama
# 测试模型推理速度
curl http://localhost:11434/api/generate -d '{
"model": "qwen2.5vl:32b",
"prompt": "GPU 是否正常工作?"
}'
如果响应速度显著快于 CPU 模式,则 GPU 加速成功!