html5的网站有哪些,设计师培训生招聘,百度关键词网站排名优化软件,电子商务网站开发遇到的问题#x1f6e0;️ 在 Windows WSL 上部署 Ollama 和大语言模型#xff1a;从镜像冗余问题看 Docker 最佳实践
⭐ 引言
随着大语言模型#xff08;LLM#xff09;和人工智能技术的迅猛发展#xff0c;开发者们越来越多地尝试在本地环境中部署模型进行实验。 但部署过程中常…️ 在 Windows WSL 上部署 Ollama 和大语言模型从镜像冗余问题看 Docker 最佳实践
⭐ 引言
随着大语言模型LLM和人工智能技术的迅猛发展开发者们越来越多地尝试在本地环境中部署模型进行实验。 但部署过程中常常会遇到 网络限制、资源冲突 和 工具复杂性 等问题。本文聚焦于实际操作中遇到的 Docker 镜像冗余问题并总结了从问题发现到解决的完整流程。同时结合 Ollama、Open WebUI 和 Qwen 的联系分享一套适用于本地 LLM 部署的 Docker 最佳实践工作流帮助开发者高效部署和管理模型。 Ollama、Open WebUI 和 Qwen 的联系 Ollama
定位本地大语言模型推理工具支持 RESTful API。功能 • 提供 LLM 模型的高效推理能力。 • 通过命令行工具快速部署 RESTful 服务。优势 • 轻量化支持 CPU 和 GPU 环境。 • 离线能力无需联网即可本地运行模型。 Open WebUI
定位基于浏览器的交互界面方便与模型交互。功能 • 提供文档导入和 RAG检索增强生成支持。 • 可视化界面适合复杂任务的操作。优势 • 用户友好降低命令行门槛。 • 高扩展性与 Ollama 的后端无缝结合。 Qwen
定位阿里巴巴推出的大语言模型支持中英文双语。功能 • 文本生成、理解和推理能力强大。 • 可在 Ollama 或 Hugging Face 环境中部署。优势 • 任务灵活适用于对话生成、知识问答等。 • 开放性强支持自定义训练与开源应用。 三者的协作
Ollama 提供模型推理服务并通过 API 接口供其他工具调用。Open WebUI 作为用户界面与 Ollama 的 API 交互。Qwen 是核心模型为用户提供实际生成能力。
️ 镜像冗余问题从发现到解决的完整分析 问题背景
在通过 Docker 部署 Open WebUI 时始终无法正常启动容器日志显示 网络无法访问 Hugging Face。但实际根源是 Docker 镜像冗余 导致的容器冲突。
现象 1. 多个停止状态的容器残留。 2. 重复镜像未清理导致新容器启动失败。 3. 错误日志显示
Error response from daemon: conflict: unable to delete image_id - image is being used by stopped container.问题排查与解决
1. 检查运行状态的容器
docker ps -a输出结果显示多个以相同镜像启动的容器其中一些处于停止状态。
2. 检查镜像状态
docker images发现重复镜像未清理占用存储空间可能导致冲突。
3. 停止并删除所有相关容器
docker stop container_id
docker rm container_id4. 强制删除镜像 即使镜像有残留关联容器docker rmi 也可以强制删除
docker rmi image_id• 例如docker rmi 7d2 此命令只需提供镜像 ID 的前几位即可Docker 会自动匹配。
5. 删除未使用的镜像 该命令清理所有未被使用的镜像释放存储空间。
docker image prune -a6. 重新加载镜像并启动容器
加载离线镜像
docker load x86-64-images.tar.gz启动 Open WebUI 容器
docker run -d --networkhost \-v /home/user/.ollama/models:/app/backend/data \-e OLLAMA_BASE_URLhttp://127.0.0.1:11434 \--name open-webui \--restart always \ghcr.io/open-webui/open-webui:main以下是对该 docker run 命令的逐步解读每个选项和参数的详细说明
**1. 基本命令docker run ** • 启动一个新的容器实例基于指定的镜像运行。 • 这是 Docker 最常用的命令用于容器化服务的启动。
2. 参数解析 -d • 含义以 后台detached模式 运行容器。 • 功能让容器在后台运行而不是占用当前终端。 • 优势适合需要长期运行的服务如 API 或 Web 应用。 –networkhost • 含义让容器直接使用主机的网络栈而不启用 Docker 默认的桥接网络。 • 功能 • 容器中的服务可直接使用主机的 IP 和端口而不需要端口映射。 • 网络性能更高避免了容器和主机之间的网络虚拟化开销。 • 注意 • 使用 --networkhost 时容器内的端口与主机共用因此可能引发端口冲突。 • 在某些场景下可能降低安全性因为容器直接暴露于主机网络。 -v /home//.ollama/models:/app/backend/data • 含义挂载主机目录 /home//.ollama/models 到容器中的 /app/backend/data。 • 功能 • 主机的 ~/.ollama/models 目录用于存储模型文件将其挂载到容器内的对应目录。 • 容器运行期间可以访问主机上的模型文件实现数据共享。 • 优势 • 数据持久化即使容器删除模型文件仍保留在主机上。 • 方便管理直接在主机上更新模型文件无需重启容器。 -e OLLAMA_BASE_URLhttp://127.0.0.1:11434 • 含义通过环境变量 -e 为容器中的服务设置配置。 • 功能 • 定义 OLLAMA_BASE_URL 环境变量指定 Ollama 服务的基地址。 • 在该示例中http://127.0.0.1:11434 表示 Ollama 服务运行在主机的 127.0.0.1 地址和 11434 端口上。 • 优势 • 配置灵活通过环境变量可动态调整服务地址无需修改代码或重新构建镜像。 –name open-webui • 含义为容器指定一个唯一的名字 open-webui。 • 功能 • 方便管理容器例如 docker stop open-webui。 • 提高可读性相比于容器的随机 ID容器名字更易识别。 –restart always • 含义设置容器的重启策略为 always。 • 功能 • 当 Docker 守护进程启动时自动重启该容器。 • 如果容器崩溃也会自动尝试重启。 • 优势 • 提高服务的稳定性和可用性适合长时间运行的容器化服务。 ghcr.io/open-webui/open-webui:main • 含义指定容器镜像来源。 • 解析 • ghcr.io/open-webui/open-webui镜像的路径托管于 GitHub Container Registry。 • main镜像的标签通常表示主分支的最新版本。 • 功能 • Docker 会从注册表拉取 open-webui:main 镜像并创建容器。 • 如果镜像已存在本地则直接使用无需重复下载。
技巧总结 缩短 ID 输入 无需完整输入容器或镜像的 ID只需提供前几位即可Docker 自动匹配
docker rm 7eb
docker rmi 7d2强制删除镜像 若提示镜像被关联容器占用可先删除关联的容器或直接用 docker rmi 强制删除。 清理未使用资源 使用 docker image prune -a 一次性清理所有未使用的镜像保持存储空间整洁。 Docker 最佳实践工作流
为避免类似问题以下是一套 系统化的 Docker 清理与部署工作流帮助开发者优化操作流程 1. 项目初始化
1. 检查已有容器和镜像状态
docker ps -a
docker images2. 清理未使用的容器和镜像
docker container prune
docker image prune -a2. 加载或拉取镜像
加载离线镜像
tar -xzvf x86-64-images.tar.gz
docker load x86-64-images.tar.gz拉取远程镜像
docker pull ghcr.io/open-webui/open-webui:main3. 部署并启动容器
1. 启动 Open WebUI
docker run -d --networkhost \-v /home/user/.ollama/models:/app/backend/data \-e OLLAMA_BASE_URLhttp://127.0.0.1:11434 \--name open-webui \--restart always \ghcr.io/open-webui/open-webui:main2. 启动 Ollama 服务
ollama serve4. 日常维护
查看容器状态
docker ps查看容器日志
docker logs container_id更新镜像
docker pull ghcr.io/open-webui/open-webui:main结语
这次部署的最大收获在于 1. 系统化问题分析通过逐步排查从网络问题定位到 Docker 镜像冲突。 2. 工具高效协作深入理解 Ollama、Open WebUI 和 Qwen 的协作方式充分发挥其功能。 3. 优化实践工作流总结出了一套高效的 Docker 清理与部署流程。
希望这篇博客能为遇到类似问题的开发者提供启发和帮助。如果您有任何问题或想法欢迎留言讨论