Docker部署AI应用的最佳实践

Docker部署AI应用的最佳实践

最近帮好几个朋友部署AI相关的服务,踩了不少坑。Ollama、Dify、RagFlow、n8n这些热门项目,每个都有自己的"脾气"。今天把部署经验整理出来,希望能帮大家少走弯路。

基础环境准备

不管部署什么,先把基础环境搞对:

系统要求:建议Ubuntu 22.04 LTS,内存至少16GB(跑大模型的话32GB起步),磁盘SSD 100GB以上。

Docker版本:用最新稳定版,别用系统自带的旧版本。安装Docker Engine而不是Docker Desktop(服务器上不需要GUI)。

Docker Compose:V2版本,直接用docker compose命令(注意没有横杠)。

GPU支持:如果要跑本地大模型,安装nvidia-container-toolkit。这个东西的安装步骤比较多,建议按官方文档一步步来,别图省事跳步骤。

Ollama部署

Ollama是本地跑大模型最方便的方案,Docker部署也很简单。

核心配置要点:

  • 把模型文件目录挂载出来做持久化,默认在容器内的/root/.ollama
  • 如果有GPU,加上deploy.resources.reservations.devices配置
  • 端口映射11434,这是Ollama的默认API端口
  • 设置OLLAMA_HOST=0.0.0.0让其他容器能访问

常见问题:模型下载到一半断了怎么办?重新pull同一个模型就行,Ollama支持断点续传。GPU不被识别?检查nvidia-smi能不能正常输出,然后确认docker的runtime配置。

Dify部署

Dify的Docker部署稍微复杂一点,因为它依赖的服务比较多(PostgreSQL、Redis、Weaviate等)。

核心配置要点:

  • 用官方提供的docker-compose.yaml,别自己从头写
  • .env文件一定要配置好,尤其是SECRET_KEYINIT_PASSWORD
  • 数据库和向量库的数据目录要挂载到宿主机
  • Nginx反向代理建议用官方配置,改端口就行

资源分配技巧:Dify本身不太吃资源,但如果你在同一台机器上跑Ollama+Dify,内存分配要注意。建议给Ollama限制内存上限,防止它把内存全占了。

常见报错:启动后页面打不开?先看日志,90%的问题是数据库连接失败或者Redis没起来。用docker compose logs -f看具体哪个服务报错。

RagFlow部署

RagFlow做RAG知识库还不错,但部署确实有点折腾。

核心配置要点:

  • RagFlow依赖Elasticsearch(或者OpenSearch),这个东西很吃内存
  • ES的vm.max_map_count必须设置为262144以上,不然ES起不来
  • 模型服务可以对接Ollama或者在线API,建议先用在线API跑通再切本地模型
  • 文档解析的临时文件会很多,给/tmp目录留足空间

资源分配:RagFlow+ES至少需要8GB内存。如果和其他服务共享机器,建议在docker-compose里用mem_limit给每个服务设上限。

常见问题:文档解析失败?检查日志看是OCR问题还是模型问题。中文PDF解析效果不好?试试先用其他工具把PDF转成文本再导入。

n8n部署

n8n作为工作流自动化工具,部署最简单。

核心配置要点:

  • 一个容器就搞定,挂载数据目录做持久化
  • 设置N8N_SECURE_COOKIE=false(如果没有HTTPS的话)
  • Webhook URL要配置正确,不然触发器不工作
  • 时区设置为Asia/Shanghai

和AI服务打通:n8n通过HTTP Request节点调用Ollama或Dify的API。建议把所有AI服务放在同一个Docker网络里,直接用容器名访问,不走宿主机端口。

多容器编排实战

如果你要在一台机器上跑Ollama+Dify+n8n的完整方案,编排是关键。

网络配置:创建一个共享的Docker网络,所有服务都加入这个网络。服务之间通过容器名互访,比如Dify的模型服务地址填http://ollama:11434

启动顺序:用depends_onhealthcheck控制启动顺序。数据库先启动→中间件(Redis、ES)→应用服务(Dify、RagFlow)→工作流(n8n)。

数据持久化:所有需要持久化的数据都挂载到宿主机的统一目录下,比如/data/ai-stack/。方便备份和迁移。

日志管理:给每个容器配置日志轮转,防止日志文件把磁盘写满。在docker-compose里加logging配置,限制单文件大小和文件数量。

常见报错速查

问题:容器启动后立刻退出
→ 看docker logs 容器名,大概率是配置文件有误或者端口冲突

问题:GPU容器报 “could not select device driver”
→ nvidia-container-toolkit没装好或者Docker daemon没重启

问题:容器之间网络不通
→ 检查是不是在同一个Docker网络里,用docker network inspect确认

问题:数据库容器反复重启
→ 磁盘空间不够或者数据目录权限问题,检查宿主机挂载目录的权限

问题:内存不够导致OOM Kill
dmesg | grep -i oom查看是哪个进程被kill了,然后调整内存限制

生产环境注意事项

如果是要上生产环境而不只是本地玩玩,还需要关注:

  • HTTPS:用Traefik或Nginx Proxy Manager做反向代理,配Let’s Encrypt证书
  • 备份:定时备份数据目录,尤其是数据库的数据卷
  • 监控:跑一个Portainer或者Uptime Kuma监控容器状态
  • 安全:不要把不必要的端口暴露到公网,用防火墙限制访问

你们用Docker部署过哪些AI应用?有没有遇到什么奇葩的报错?欢迎在评论区分享你的部署经验和解决方案,大家一起排坑。

4 个赞

配置要求高吗

踩了几个坑终于搞定

观点很新颖

企业内部用很合适

1 个赞

有群吗想交流

学习了

这个值得深入研究

Windows折腾了半天终于好了

1 个赞

实用帖顶一下

干货满满

1 个赞

mark一下

狂热七七直接上生产了

代码审查工具对比得不错