Docker+Ollama+Xinference+RAGFlow+Dify+Open webui部署及踩坑问题
目录
一、Xinference部署
(一)简介
(二)部署
(三)参数
(四)错误问题
(五)Xinference配置Text-embedding模型
(六)Xinference配置排序模型
(七)Xinference配置语言模型
(八)遇到的问题
二、RAGFlow部署
(一)克隆仓库
(二) 使用预构建的Docker镜像并启动服务器
(三)服务器启动并运行后,检查服务器状态
(四)访问
(五)部署RAGFlow遇到的问题
三、 Dify部署
(一)克隆代码到本地环境
(二)启动 Dify
(三)更新 Dify
(四)访问 Dify
(五)自定义配置
(六)部署dify遇到的问题
问题1:访问dify管理员页面的时候转圈卡住
问题2:管理员账号输入太多次被锁住,需要等24小时
四、Ollama部署
五、WebUI
(一)步骤1:拉取Open web镜像
(二)步骤2:运行容器
(三)遇到的问题
一)添加了新的用户后,并且给这些用户加到同一个组内,组的权限设置了新用户可以查看模型列表,但是新用户登录后依然看不到列表。
编辑 二)open webui加载网页太慢了!!
六、进行组合
(一)Ragflow添加Ollama
(二)Ragflow添加Xinference
(三)Dify集成Ollama
(四)Dify集成Xinference 排序模型
(五)Dify集成RAGFlow
(六)Dify集成vLLM
七、docker常见问题
(一)遇到 Docker 容器名称冲突错误,说明你尝试创建或运行的容器名称已被其他容器占用。以下是分步解决方案:
(二)当需要运行一个已有的 Docker 容器时,通常有两种情况:启动已停止的容器 或 基于现有镜像创建并运行新容器。
一、Xinference部署
(一)简介
Xorbits Inference (Xinference) 是一个开源平台,用于简化各种 AI 模型的运行和集成。借助 Xinference,您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理,并创建强大的 AI 应用。
项目地址:https://github.com/xorbitsai/inference#/
文档地址:https://inference.readthedocs.io/zh-cn/latest/#/
(二)部署
docker run \--name xinference \-d \-p 9998:9997 \-e XINFERENCE_HOME=/data/2-model \-v $(pwd):/data/2-model \--gpus all \xprobe/xinference:latest \xinference-local -H 0.0.0.0
部署成功之后可以直接访问:http://localhost:9998

(三)参数
-
docker run- 启动一个新的Docker容器 -
--name xinference- 将容器命名为"xinference" -
-d- 以分离(后台)模式运行容器 -
-p 99978:9997- 将容器的9998端口映射到主机的9997端口 -
-e XINFERENCE_HOME=/data/model- 设置环境变量,指定Xinference的主目录为容器内的/data/model -
-v $(pwd):/data/model- 将当前工作目录挂载到容器内的/data/model目录,实现数据持久化 -
--gpus all- 允许容器使用主机上的所有GPU资源 -
xprobe/xinference:latest- 使用最新版本的xprobe/xinference镜像 -
xinference-local -H 0.0.0.0- 在容器内运行xinference-local命令,并设置主机地址为0.0.0.0(允许从任何IP地址访问)
(四)错误问题
在运行的时候报错提示:Unable to find image 'xprobe/xinference:latest' locally
Unable to find image 'xprobe/xinference:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
需要更换docker的下载源(一定要找到合适的源):
1.打开配置文件
vim /etc/docker/daemon.json
2.加入如下内容
{
"registry-mirrors": ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"]
}
3.执行以下命令,使生效
systemctl daemon-reload
systemctl restart docker
参考:解决docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http: request canc_docker_君子如玉zzZ-腾讯云开发者社区
(五)Xinference配置Text-embedding模型


(六)Xinference配置排序模型


添加成功,运行模型:

(七)Xinference配置语言模型

(八)遇到的问题
一)Xinference使用vLLM部署LLM模型和私有化部署LLM模型哪个更好?速度更快?用户并发量更多?
在比较Xinference使用vLLM部署LLM模型与直接通过vLLM进行私有化部署的优劣时,需从部署便捷性、速度、并发能力、适用场景等多个维度综合分析。以下是两者的对比分析:
1. 部署便捷性与灵活性
-
Xinference
Xinference提供了一键式部署流程,支持通过Web界面或命令行快速部署多种模型(如LLM、多模态、Embedding等),并内置了对GGML量化格式的支持,适合需要快速启动和简化运维的场景。用户无需深入掌握底层框架即可完成模型部署,且支持跨平台(如Mac、GPU服务器)610。-
优势:
-
提供Web GUI和兼容OpenAI的API接口,适合非技术用户。
-
支持分布式推理和多模型并行部署。
-
-
局限性:
-
依赖第三方库(如vLLM、PyTorch),安装时可能因版本冲突需额外调整6。
-
-
-
vLLM私有化部署
直接使用vLLM部署需手动配置环境、下载模型文件,并编写服务启动脚本。但vLLM与Hugging Face和ModelScope模型库无缝集成,支持灵活选择模型格式(如AWQ量化),适合需要深度定制化或特定优化的场景18。-
优势:
-
更直接控制显存管理(如通过
gpu_memory_utilization参数调节显存占用)。 -
支持自定义模型架构和量化方案。
-
-
2. 推理速度与吞吐量
-
vLLM的核心优势
vLLM通过PagedAttention和Continuous Batching技术,显著提升了吞吐量。实验显示,其吞吐量比HuggingFace Transformers高14-24倍,比HuggingFace TGI高2.2-2.5倍,尤其在处理高并发请求时表现突出111。-
关键优化:
-
PagedAttention:通过分块管理注意力机制的KV缓存,减少显存碎片化,提升显存利用率。
-
动态批处理:实时调整批次大小,避免GPU算力空闲211。
-
-
-
Xinference的性能表现
Xinference若集成vLLM作为后端(如通过SWIFT框架调用),其推理速度接近直接使用vLLM。但Xinference作为上层框架,可能因额外封装层(如API路由、多模型调度)引入微小的延迟。不过,其分布式设计支持横向扩展,可通过多节点部署提升整体吞吐量610。
3. 并发处理能力
-
高并发场景下的对比
-
vLLM:专为高并发设计,支持动态批处理和张量并行(多GPU分布式推理),适合需要处理数千QPS的生产环境11。
-
Xinference:通过分布式架构支持负载均衡和多副本部署,理论上可扩展至更高并发量,但实际性能受底层框架(如是否启用vLLM)影响较大610。
-
4. 适用场景推荐
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 快速原型验证或小型应用 | Xinference | 部署简单,支持多模型和量化格式,适合快速迭代610。 |
| 高吞吐生产环境 | vLLM私有化部署 | 极致优化显存和计算效率,适合需要处理大规模并发请求的场景111。 |
| 多模态或边缘计算需求 | Xinference | 支持语音、图像等多模态模型,且GGML格式适配低资源设备610。 |
| 定制化模型与微调集成 | vLLM + 私有化部署 | 支持LoRA等微调模型合并,灵活适配业务需求1011。 |
5. 综合建议
-
选择Xinference的情况:
需要快速部署、多模型支持或非GPU环境(如Mac),且对极致吞吐量要求不苛刻的场景。 -
选择vLLM私有化部署的情况:
需最大化利用GPU资源、处理高并发请求,或需深度定制模型架构与推理流程的企业级应用。
两种方案可结合使用,例如通过Xinference管理模型服务编排,底层调用vLLM引擎,以兼顾易用性与性能
二)Xinference构建LLM模型的时候,副本设置几个合适?
在Xinference中设置LLM模型的副本数时,需结合硬件资源(GPU/CPU数量、显存/内存容量)、模型规模、请求并发量和延迟要求综合权衡。以下是具体建议:
1. 核心原则
-
资源利用率最大化:确保每个副本的GPU显存占用量不超过单卡容量(如A100 80G可部署1个70B模型副本,或2个13B模型副本)。
-
延迟与吞吐平衡:副本数越多,理论吞吐量越高,但单请求延迟可能因负载均衡调度略微增加。
-
容灾冗余:至少保留1个备用副本(如总副本数≥2),避免单点故障导致服务中断。
2. 分场景推荐
场景1:资源有限(如单GPU)
-
模型规模:≤7B参数的模型(如Llama-2-7B)
-
推荐副本数:1-2个
-
理由:
-
单个7B模型在FP16精度下显存占用约14GB,单卡(如24G显存)可部署1个副本并保留显存余量处理动态批处理。
-
若启用量化(如GGML 4-bit),显存占用降至约4GB,单卡可部署2-3个副本提升并发能力。
-
-
场景2:高并发生产环境(多GPU集群)
-
模型规模:≥13B参数的模型(如Llama-2-13B)
-
推荐副本数:GPU数量×副本密度(参考下表)
| GPU型号 | 单卡显存 | 模型精度 | 单卡副本数 | 总副本数(4卡) |
|---|---|---|---|---|
| A100 80G | 80GB | FP16 | 1(13B) | 4 |
| A100 80G | 80GB | 8-bit量化 | 2(13B) | 8 |
| RTX 3090 | 24GB | 4-bit量化 | 1(13B) | 4(需4卡) |
-
动态调整策略:
-
初始部署按GPU数量1:1设置副本(如4卡→4副本),再根据实际QPS逐步增加。
-
使用Kubernetes或Xinference内置的负载均衡器自动扩缩容。
-
场景3:延迟敏感型应用
-
推荐副本数:副本数 ≤ GPU数量
-
理由:避免跨节点通信开销(如模型并行),确保请求由本地副本直接响应。
-
示例:4 GPU部署4副本,每个副本独占1卡,延迟最低。
-
3. 计算公式与基准测试
-
理论最大副本数:
副本数=⌊单卡显存模型显存占用⌋×GPU数量副本数=⌊模型显存占用单卡显存⌋×GPU数量
例如:13B模型FP16显存占用约26GB,A100 80G单卡可部署3副本(80/26≈3.07)。
-
基准测试步骤:
-
压测工具:使用
wrk或locust模拟并发请求。 -
监控指标:关注吞吐量(QPS)、平均延迟(P50/P99)、GPU利用率。
-
调整依据:
-
若GPU利用率<70%,可增加副本或启用动态批处理。
-
若P99延迟超过阈值(如1s),减少副本数或升级硬件。
-
-
4. 高级优化技巧
-
混合部署:
-
大模型(如70B)与小模型(如7B)共用集群,按请求类型路由。
-
使用Xinference的模型优先级调度策略,确保高优先级请求优先分配资源。
-
-
量化与显存优化:
-
4-bit量化可将显存占用降低至1/4,允许部署更多副本。
-
启用vLLM的
gpu_memory_utilization=0.9参数,显存利用率提升10%-15%。
-
-
分布式副本:
-
跨多物理节点部署副本,通过Xinference的全局负载均衡分散流量(适合云原生环境)。
-
5. 总结建议
| 需求类型 | 推荐副本数 | 配置示例 |
|---|---|---|
| 开发测试环境 | 1副本(单GPU) | 1×Llama-2-7B(4-bit量化) |
| 中等并发生产环境 | GPU数量×1.5 | 4 GPU → 6副本(13B 8-bit量化) |
| 超高并发/低延迟 | GPU数量×2 + 自动扩缩容 | 8 GPU → 16副本(7B FP16) |
最终决策需基于实际压测结果,优先保证GPU利用率在80%-90%区间。
二、RAGFlow部署
RAGFlow 是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程,结合大语言模型(LLM)针对用户各类不同的复杂格式数据提供可靠的问答以及有理有据的引用。
项目地址:https://github.com/infiniflow/ragflow
文档地址:https://ragflow.io/docs/dev/
(一)克隆仓库
使用docker安装
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/docker
git checkout -f v0.17.2
完成后如下图所示:
(二) 使用预构建的Docker镜像并启动服务器
注意: 上面的命令会下载v0.17.2-slim版本的RAGFlow Docker镜像。有关不同RAGFlow版本的说明,请参考下表。如果要下载不同于v0.17.2-slim的RAGFlow版本,请在使用docker compose启动服务器之前,在docker/.env中相应地更新RAGFLOW_IMAGE变量。例如:设置RAGFLOW_IMAGE=infiniflow/ragflow:v0.17.2以获取完整版本v0.17.2。
在当前目录下
vim ragflow/docker/.env

官方给出默认使用CPU进行嵌入和DeepDoc任务,但我们一般使用的是GPU
# Use CPU for embedding and DeepDoc tasks:
# docker compose -f docker-compose.yml up -d# To use GPU to accelerate embedding and DeepDoc tasks:
docker compose -f docker-compose-gpu.yml up -d
| RAGFlow image tag | Image size (GB) | Has embedding models and Python packages? | Stable? |
|---|---|---|---|
v0.17.2 | ≈9 | ✔️ | Stable release |
v0.17.2-slim | ≈2 | ❌ | Stable release |
nightly | ≈9 | ✔️ | Unstable nightly build |
nightly-slim | ≈2 | ❌ | Unstable nightly build |
执行完如下图:

以上提示ragflow-server 的端口号被占用了,修改下端口号:
来自守护进程的错误响应:驱动程序编程失败外部连接端点ragflow-server (46624c43ac270416224d934ebe1f5894d0b275cd330bde66693f73b68bba9ae2):绑定0.0.0.0:443失败:端口已经分配
Error response from daemon: driver failed programming external connectivity on endpoint ragflow-server (46624c43ac270416224d934ebe1f5894d0b275cd330bde66693f73b68bba9ae2): Bind for 0.0.0.0:443 failed: port is already allocated
Error response from daemon: driver failed programming external connectivity on endpoint ragflow-server (69718cf5c226f76a3acc7dd5228731d276b19221e0bfb9ecd9f46230424581d1): Bind for 0.0.0.0:80 failed: port is already allocated

改完后,再重启容器
docker-compose up -d
(三)服务器启动并运行后,检查服务器状态
docker logs -f ragflow-server

(四)访问
在浏览器中输入服务器
的IP地址:81,登录RAGFlow

(五)部署RAGFlow遇到的问题
执行命令:docker compose -f docker-compose-gpu.yml up -d,提示unknown shorthand flag: 'f' in -f
查看版本号:docker -v
1. 确认 Docker 版本是否支持 Compose V2
Compose V2 需要 Docker Engine 20.10 或更高版本。运行以下命令检查 Docker 版本:
docker --version
-
如果版本低于
20.10,需先升级 Docker:-
Linux:使用包管理器升级(如
apt、yum)。 -
macOS/Windows:下载最新版 Docker Desktop。
-
2. 安装 Docker Compose V2 插件
如果 Docker 版本符合要求但缺少插件,需手动安装:
方法 1:通过 Docker 官方脚本安装
# 下载并安装 Compose V2 插件
mkdir -p ~/.docker/cli-plugins
curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
chmod +x ~/.docker/cli-plugins/docker-compose
方法 2:使用包管理器安装(Linux)
-
Debian/Ubuntu:
sudo apt update sudo apt install docker-compose-plugin -
CentOS/RHEL:
sudo yum install docker-compose-plugin
验证安装
docker compose version
# 输出应包含 `Docker Compose version v2.x.x`
3. 退而使用 Docker Compose V1
如果无法安装 V2 插件,可直接使用旧版 docker-compose(V1):
安装 Docker Compose V1
# 下载独立脚本
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
# 输出应类似 `docker-compose version 1.29.2`
4. 根据版本选择命令
-
Compose V2 插件:使用
docker compose ...docker compose -f docker-compose-gpu.yml up -d -
Compose V1 独立版:使用
docker-compose ...docker-compose -f docker-compose-gpu.yml up -d
5. 其他可能的问题
-
权限问题:确保插件或脚本有执行权限。
-
路径问题:检查
~/.docker/cli-plugins或/usr/local/bin是否在系统PATH中。 -
重启 Docker 服务:安装后重启 Docker 守护进程:
sudo systemctl restart docker
三、 Dify部署
Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。
项目地址:https://github.com/langgenius/dify 文档地址:https://docs.dify.ai/zh-hans#/
下载对应版本:
https://github.com/langgenius/dify/tags
(一)克隆代码到本地环境
git clone https://github.com/langgenius/dify.git --branch 1.1.3(最新版本)
(二)启动 Dify
-
进入 Dify 源代码的 Docker 目录
cd dify/docker -
复制环境配置文件
cp .env.example .env -
启动 Docker 容器
根据你系统上的 Docker Compose 版本,选择合适的命令来启动容器。你可以通过
$ docker compose version命令检查版本,详细说明请参考 Docker 官方文档:-
如果版本是 Docker Compose V2,使用以下命令:
docker compose up -d-
如果版本是 Docker Compose V1,使用以下命令:
docker-compose up -d -
运行命令后,你应该会看到类似以下的输出,显示所有容器的状态和端口映射:

最后检查是否所有容器都正常运行:
docker compose ps
(三)更新 Dify
进入 dify 源代码的 docker 目录,按顺序执行以下命令:
cd dify/docker
docker compose down
git pull origin main
docker compose pull
docker compose up -d
同步环境变量配置 (重要!)
-
如果
.env.example文件有更新,请务必同步修改你本地的.env文件。 -
检查
.env文件中的所有配置项,确保它们与你的实际运行环境相匹配。你可能需要将.env.example中的新变量添加到.env文件中,并更新已更改的任何值。
(四)访问 Dify
你可以先前往管理员初始化页面设置设置管理员账户:
# 本地环境
http://localhost/install# 服务器环境
http://your_server_ip/install
Dify 主页面:
# 本地环境
http://localhost# 服务器环境
http://your_server_ip
(五)自定义配置
编辑 .env 文件中的环境变量值。然后重新启动 Dify:
docker compose down
docker compose up -d
完整的环境变量集合可以在 docker/.env.example 中找到。
(六)部署dify遇到的问题
问题1:访问dify管理员页面的时候转圈卡住
F12查看错误码为502:


解决方法:
Dify转圈圈报502错误,是nginx启动太早了,在docker重启nginx服务,或者命令行:docker compose restart nginx
docker compose restart nginx
问题2:管理员账号输入太多次被锁住,需要等24小时
解决方法:连上 Redis ,删除这个 超时的Key
docker exec -it docker-redis-1 sh
然后输入
redis-cli # 进入命令
keys * # 查看keys
ttl login_error_rate_limit:admin@126.com # 看当前用户还有多少限时
del login_error_rate_limit:admin@126.com # 删除限时

完成后,就可以继续登录了!
四、Ollama部署
可参考:在Linux系统安装Ollama两种方法:自动安装和手动安装,并配置自启动服务 -CSDN博客
五、WebUI
项目地址:GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 文档地址:🏡 Home | Open WebUI
(一)步骤1:拉取Open web镜像
首先从GitHub Container Registry中提取最新的Open web Docker镜像。
docker pull ghcr.io/open-webui/open-webui:main
(二)步骤2:运行容器
使用默认设置运行容器,CPU运行的(CPU在加载网页的时候会比较慢,如果有条件的建议s使用GPU运行)。该命令包括一个卷映射,以确保数据的持久存储。
docker run -d \
-p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/data/6-docker \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main
1. 参数说明:
Volume Mapping(-v open-webui:/app/backend/data):确保数据的持久存储。这可以防止容器重启之间的数据丢失。
Port Mapping(-p 3000:8080):在本地机器的端口3000上公开web。
2. 使用GPU支持
对于Nvidia GPU支持,在docker run命令中添加——GPU all:
前面的镜像拉取改为cuda的(这步不执行,会提示找不到ghcr.io/open-webui/open-webui:cuda,但也会自动去下载)
docker pull ghcr.io/open-webui/open-webui:cuda
docker run -d \
-p 3000:8080 \
--gpus all \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/data/6-docker \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:cuda

3. 单用户模式(禁止登录)
要绕过单用户设置的登录页面,将WEBUI_AUTH环境变量设置为False:
docker run -d \
-p 3000:8080 \
-e WEBUI_AUTH=False \
-v open-webui:/app/backend/data \
--name open-webui \
ghcr.io/open-webui/open-webui:main
提醒:修改完成后,不能在单用户模式和多用户模式之间进行切换。
4. 高级配置:连接到另一台服务器上的Ollama
要将Open web连接到位于另一台主机上的Ollama服务器,请添加OLLAMA_BASE_URL环境变量:
docker run -d \
-p 3000:8080 \
-e OLLAMA_BASE_URL=https://example.com \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main
5. 访问web界面
容器运行后,进入Open WebUI:
http://localhost:3000
(三)更新
要将本地Docker安装更新到最新版本,您可以使用Watchtower或手动更新容器。
选项1:使用watchtower
使用watchtower,您可以自动更新过程:
docker run --rm --volume /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once open-webui
(如果不同,请将open-web替换为您的容器名称。)
选项2:手动更新
1. 停止并移除当前容器:
docker rm -f open-webui
2. 获取最新版本:
docker pull ghcr.io/open-webui/open-webui:main
3.再次启动容器:
docker run -d -p 3000:8080 -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main
这两种方法都会让你的Docker实例更新并运行最新的版本。
下一个步骤 安装完成后,访问:
通过http://localhost:3000访问Open web。
或http://localhost:8080/,当使用Python部署时。
(三)遇到的问题
一)添加了新的用户后,并且给这些用户加到同一个组内,组的权限设置了新用户可以查看模型列表,但是新用户登录后依然看不到列表。
1. 添加了新的用户后,并且给这些用户加到同一个组内,组的权限设置了新用户可以查看模型列表,但是新用户登录后依然看不到列表。

2.新用户登录后,依然看不到模型选择列表
3.直接进行对话,会让选择模型,😒

4.设置——管理员面板——模型——选择你想分享的模型——设置——可见性——权限组——选择你想分享权限组——添加——保存并更新。
5.编辑每个模型的权限,把可见性由private改为public,保存并更新。也可以选择对应的工作组,在组内的成员能看到这些模型。

二)open webui加载网页太慢了!!
刷新一次,页面很久都加载不出来,并且我是用gpu进行部署的open webui
六、进行组合
(一)Ragflow添加Ollama

(二)Ragflow添加Xinference

(三)Dify集成Ollama
1. 打开设置

2. 添加Ollama模型


(四)Dify集成Xinference 排序模型
1. 选择

2.


(五)Dify集成RAGFlow
1. 在RAGFlow中创建新密钥

2. 获取RAGFlow的知识库ID
3. Dify添加外部知识库


(六)Dify集成vLLM

七、docker常见问题
(一)遇到 Docker 容器名称冲突错误,说明你尝试创建或运行的容器名称已被其他容器占用。以下是分步解决方案:
1. 查看已存在的同名容器
首先确认冲突容器的状态:
# 列出所有容器(包括已停止的),过滤名称 "xinference"
docker ps -a | grep "xinference"
输出示例:
bcac7f08fb09 xinference-image "/entrypoint.sh" 2 hours ago Exited (0) 1 hour ago xinference
2. 根据需求选择操作
场景 1:不需要保留旧容器
直接删除占用名称的旧容器:
# 强制删除容器(无论是否在运行)
docker rm -f xinference# 或分步操作(先停止后删除)
docker stop xinference
docker rm xinference
场景 2:需要保留旧容器但继续使用名称
修改新容器的名称(例如添加后缀):
# 在 docker run 时指定新名称
docker run --name xinference-new -d your-image# 或在 docker-compose.yml 中修改服务名
services:xinference-new: # 修改此处名称image: your-image
3. 重新运行容器
清除冲突后,重新执行原始命令:
# 直接运行(名称已释放)
docker run --name xinference -d your-image# 或使用 docker-compose
docker-compose up -d
4. 防止未来冲突
(1) 自动清理旧容器(适合临时容器)
运行容器时添加 --rm 参数,容器停止后自动删除:
docker run --rm --name xinference -d your-image
(2) 定期清理无用容器
# 删除所有已停止的容器
docker container prune
(二)当需要运行一个已有的 Docker 容器时,通常有两种情况:启动已停止的容器 或 基于现有镜像创建并运行新容器。
一、启动已停止的容器
如果容器已存在但处于停止状态(Exited),可以直接启动它:
1. 查看所有容器(包括已停止的)
docker ps -a
输出示例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 nginx:latest "nginx -g ..." 2 hours ago Exited (0) 10 minutes ago my-nginx
2. 启动指定容器
docker start <容器ID或名称>
# 示例
docker start a1b2c3d4e5f6
docker start my-nginx
3. 检查容器状态
docker ps | grep my-nginx
4. 查看容器日志(调试启动问题)
docker logs my-nginx
二、基于现有镜像运行新容器
如果希望基于已有镜像创建一个新容器(而非复用旧容器):
1. 查找可用镜像
docker images
输出示例:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 2 weeks ago 141MB
2. 运行新容器
docker run [选项] <镜像名称或ID>
常用选项:
| 选项 | 说明 |
|---|---|
|
| 后台运行(守护模式) |
|
| 指定容器名称(避免随机命名冲突) |
|
| 端口映射(如 |
|
| 数据卷挂载 |
|
| 交互式终端(常用于调试) |
示例:
# 后台运行并命名容器
docker run -d --name my-nginx-new -p 80:80 nginx:latest# 带交互式终端(退出后容器停止)
docker run -it --name my-alpine alpine:latest sh
三、处理常见问题
1. 端口冲突
若提示 port is already allocated,需修改端口映射或释放占用端口:
# 修改主机端口(如 8080:80)
docker run -d --name my-nginx-new -p 8080:80 nginx:latest
2. 容器名称冲突
若提示 container name already in use,删除旧容器或指定新名称:
# 强制删除旧容器
docker rm -f my-nginx-old# 或运行新容器时换名
docker run -d --name my-nginx-v2 nginx:latest
3. 容器启动后自动退出
检查容器日志,通常是因为主进程结束:
docker logs my-nginx
-
解决方案:确保容器内有持久化进程(如使用
nginx -g "daemon off;")。
四、使用 Docker Compose 管理容器
如果容器是通过 docker-compose.yml 定义的:
1. 启动所有服务
docker-compose up -d
2. 启动单个服务
docker-compose up -d <服务名>
3. 重建容器(修改配置后)
docker-compose up -d --build <服务名>
五、总结
| 场景 | 命令 |
|---|---|
| 启动已停止的容器 | docker start <容器ID或名称> |
| 创建并运行新容器 | docker run -d --name <名称> -p 端口:端口 <镜像> |
| 解决端口/名称冲突 | 修改端口映射或容器名称,或删除旧容器 |
| 调试容器启动失败 | docker logs <容器名> |
参考:AI老板心中的迈巴赫:DeepSeek+Ollama+Xinference+RAGFlow+Dify部署教程,RAG落地5件套!
相关文章:
Docker+Ollama+Xinference+RAGFlow+Dify+Open webui部署及踩坑问题
目录 一、Xinference部署 (一)简介 (二)部署 (三)参数 (四)错误问题 (五)Xinference配置Text-embedding模型 (六)Xinference配…...
Axure项目实战:智慧城市APP(四)医疗信息(动态面板、选中交互应用)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:智慧城市APP医疗信息模块 主要内容:医疗信息模块原型设计与交互 应用场景:医疗信息行业 案例展示: 案例视频&…...
缓存设计模式
缓存设计模式(Cache Design Pattern)是一种用于存储和管理频繁访问数据的技术,旨在提高系统性能、降低数据库或后端服务的负载,并减少数据访问延迟。以下是几种常见的缓存设计模式,并用 Python Redis 进行示例代码实现…...
第十三章:优化内存管理_《C++性能优化指南》_notes
优化内存管理 一、内存管理基础概念二、自定义分配器三、智能指针优化重点知识代码示例:智能指针性能对比 四、性能优化关键点总结多选题设计题答案与详解多选题答案设计题示例答案(第1题) 一、内存管理基础概念 重点知识 动态内存分配开销…...
【网络通信安全】基于华为 eNSP 的链路聚合、手工负载分担模式与 LACP 扩展配置 全解析
目录 一、引言 二、链路聚合技术基础 2.1 链路聚合的定义与作用 2.2 链路聚合的工作原理 2.3 链路聚合的模式分类 三、华为 eNSP 简介 3.1 eNSP 的概述 3.2 eNSP 的安装与配置 3.2.1 安装环境要求 3.2.2 安装步骤 3.2.3 配置虚拟网卡 四、手工负载分担模式配置 4.…...
RK3568笔记八十: Linux 小智AI环境搭建
若该文为原创文章,转载请注明原文出处。 最近小智AI火了,韦老师出了 Linux 小智 AI 聊天机器人 版本,想移植到 RK3568上, 由于和韦老师硬件不同,所以需要交叉编译一些库,为后续移植做准备。 一、环境 1、…...
Transformer 通关秘籍2:利用 BERT 将文本 token 化
前面两节分别通过两个代码示例展示了模型将文本转换为 token 之后是什么样的,希望你可以对此有一个感性的认识。 本节来简要介绍一下将一个连续的文本转换为 token 序列的大致过程,这个过程被称为分词,也叫 tokenization。 在你没了解这方面…...
Spring Boot分布式项目异常处理实战:从崩溃边缘到优雅恢复
当单体应用拆分成分布式系统,异常就像被打开的潘多拉魔盒:RPC调用超时、分布式事务雪崩、第三方接口突然罢工…在最近的电商大促中,我们的系统就经历了这样的至暗时刻。本文将用真实代码示例,展示如何构建分布式异常处理体系。 一…...
Vue3 中使用 Sortablejs 实现拖拽排序功能 序号不更新问题
Vue3 中使用 Sortablejs 实现拖拽排序功能 序号不更新问题 安装依赖 npm install sortablejs --save简单使用 <template><div class"app-container"><div class"table-header"><el-button type"primary" click"hand…...
网络运维学习笔记(DeepSeek优化版) 024 HCIP-Datacom OSPF域内路由计算
文章目录 OSPF域内路由计算:单区域的路由计算一、OSPF单区域路由计算原理二、1类LSA详解2.1 1类LSA的作用与结构2.2 1类LSA的四种链路类型 三、OSPF路由表生成验证3.1 查看LSDB3.2 查看OSPF路由表3.3 查看全局路由表 四、2类LSA详解4.1 2类LSA的作用与生成条件4.2 2…...
【云馨AI-大模型】自动化部署Dify 1.1.2,无需科学上网,Linux环境轻松实现,附Docker离线安装等
Dify介绍 官网:https://dify.ai/zh生成式 AI 应用创新引擎开源的 LLM 应用开发平台。提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力,轻松构建和运营生成式 AI 原生应用。 Dify安装脚本 目录创建 mkdir -p /data/yunxinai &&a…...
Android 简化图片加载与显示——使用Coil和Kotlin封装高效工具类
为了简化使用Coil加载网络图片和GIF的过程,我们可以封装一个工具类。这个工具类将包括初始化ImageLoader的方法、加载图片到ImageView的方法,以及可能的其他便捷方法,如加载圆形图片、设置占位图等。下面是一个示例: 首先&#x…...
CUDA 学习(2)——CUDA 介绍
GeForce 256 是英伟达 1999 年开发的第一个 GPU,最初用作显示器上渲染高端图形,只用于像素计算。 在早期,OpenGL 和 DirectX 等图形 API 是与 GPU 唯一的交互方式。后来,人们意识到 GPU 除了用于渲染图形图像外,还可以…...
棱镜七彩受邀出席“供应链安全国家标准贯标应用深度行”活动并做主题分享
近日,“供应链安全国家标准贯标应用深度行”活动在北京顺利举办,此次活动汇聚了行业内的众多专家和企业代表,深入探讨了供应链安全国家标准的制定与实施路径。棱镜七彩副总裁黄浩东受邀出席,并发表了题为《国家标准实施路径下的企…...
Vue3项目中的.vscode文件夹
.vscode 文件夹主要用于存放与 Visual Studio Code(VS Code)编辑器相关的项目配置文件,这些文件能让项目在 VS Code 里的开发体验更加个性化和高效。 extensions.json 在 .vscode 文件夹中,extensions.json 文件的作用是列出项目…...
系统转换、系统维护、净室软件工程、构件软件工程(高软51)
系列文章目录 系统转换、系统维护、净室软件工程、构件软件工程 文章目录 系列文章目录前言一、系统转换二、系统维护三、净室软件工程四、基于构件的软件工程总结 前言 本节讲明遗留系统的系统转换、系统维护、净室软件工程、基于构件软件工程相关知识。 一、系统转换 就是讲…...
K8S学习之基础四十四:k8s中部署Kibana
在Kubernetes集群中安装Kibana通常涉及使用Helm Chart或直接使用Kubernetes Manifest文件。以下是使用Helm Chart安装Kibana的步骤: 添加Elastic Helm仓库 首先,添加Elastic的Helm仓库: bash 复制 helm repo add elastic https://helm.ela…...
联核防爆无人叉车:高危环境中的安全搬运守护者
联核防爆AGV无人叉车是专为易燃易爆环境设计的智能搬运设备,其特点、功能与应用场景均围绕“安全”与“智能”核心展开:联核科技官网-AGV叉车十大品牌-无人叉车厂家-自动化叉车-智能搬运码垛机器人-智能叉车系统解决方案专家 一、核心特点 防爆设计电气…...
23种设计模式-责任链(Chain of Responsibility)设计模式
责任链设计模式 🚩什么是责任链设计模式?🚩责任链设计模式的特点🚩责任链设计模式的结构🚩责任链设计模式的优缺点🚩责任链设计模式的Java实现🚩代码总结🚩总结 🚩什么是…...
Linux使用集群服务器查看已安装conda环境,且环境名无显示、系统环境混乱等问题
一、问题 在使用集群服务器前可以查看导入,module load不需要安装。我都是自己重新下载Anaconda3-2024.10-1-Linux-x86_64.sh,然后安装,导致混乱。下面是情况 1.创建的环境名跑到目录下了 2.多个base,且有个base无显示 二、解决办法 1.删…...
python蓝桥杯刷题的重难点知识笔记
1、datetime模块 datetime.date:代表日期,包含年、月、日信息。datetime.time:代表时间,包含时、分、秒、微秒信息。datetime.datetime:结合了日期和时间,包含年、月、日、时、分、秒、微秒信息。datetime.…...
Android平台毫秒级低延迟HTTP-FLV直播播放器技术探究与实现
一、前言 在移动互联网蓬勃发展的今天,视频播放功能已成为众多Android应用的核心特性之一。面对多样化的视频格式和传输协议,开发一款高效、稳定的视频播放器是许多开发者追求的目标。FLV(Flash Video)格式,尽管随着H…...
Redmi Note 11 T pro + 刷入 LinegaOs 22.1 记录 手机已经解锁bl.
Redmi Note 11 T pro 刷入 LinegaOs 22.1 记录 手机已经解锁bl. 获取LIneagaOS源码, 以及https://github.com/xiaomi-mediatek-devs 这个组织提供的代码,非常感谢 环境要求: ubuntu 22.04 需要准备的依赖 sudo apt install git curl vim…...
《Operating System Concepts》阅读笔记:p483-p488
《Operating System Concepts》学习第 40 天,p483-p488 总结,总计 6 页。 一、技术总结 1.object storage (1)object storage 管理软件 Hadoop file system(HDFS)、Ceph。 二、英语总结(生词:1) 1.commodity (1)commodity: com-(“tog…...
极光优化PLO-Transformer-LSTM多变量时序
极光优化算法(PLO)于2024年8月发表于SCI期刊《Neurocomputing》,利用算法极光优化算法PLO优化Transformer-LSTM模型,同时提供与未优化模型的对比,包含柱状图、两张雷达图、二维散点图等等。 (一)LSTM模型LSTM是一种在时…...
Android开发:基于 Kotlin 协程的设备指令控制工具类设计与实现
在安卓开发中,设备控制是一个常见的需求。本文将介绍如何使用 Kotlin 协程实现一个高效、健壮的设备指令控制工具类。该工具类支持指令队列、重试机制、状态管理等功能,并适配安卓平台,确保生命周期管理和主线程安全性。通过本文,…...
SQL Server 中常见的数据类型及其详细解释、内存占用和适用场景
以下是 SQL Server 中常见的数据类型及其详细解释、内存占用和适用场景: 数据类型类别数据类型解释内存占用适用场景整数类型bigint用于存储范围较大的整数,范围是 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807)8 字节需要…...
Android Kotlin 权限工具类封装:简化动态权限管理
在 Android 开发中,动态权限管理是一个常见的需求,尤其是在高版本 Android 系统中,权限管理变得更加严格和复杂。为了简化权限申请的流程,减少重复代码,本文将介绍如何使用 Kotlin 封装一个高效、易用的权限工具类。 权…...
数据结构每日一题day3(顺序表)★★★★★
题目描述:顺序表L的元素递增有序排列,设计一个算法在插入元素x后保持该顺序表仍然递增有序排列,插入成功后返回插入元素所在位置,不成功返回-1 算法思想:在递增有序的顺序表中插入元素 x 并保持有序性,步骤如下: 合法…...
Git合并删除原理
如果有 A 分支,从 A 分支上新建 B 分支,B 分支做出修改合并到 A 分支,然后删除 B 分支,A 分支还有没有 B 分支修改的内容 关键原理: 合并的本质是提交历史的整合 1. 合并操作会将 B 的修改永久写入 A 的历史 当 …...

