在构建 RAG(检索增强生成)架构的 AI 应用时,向量数据库是承载知识库检索的核心基础设施。本文将基于真实的纯内网生产环境,详细演示如何利用 Docker Compose 完成 Milvus 2.3.0 向量数据库的全流程容器化部署,同时集成 Etcd、MinIO 与 Attu 可视化平台,帮助你快速搭建稳定、安全、可复现的 AI 项目存储底座。
部署背景与架构设计
本次部署服务于个人 AI 项目「商助慧」(面向程序员的 AI 写作助手),旨在构建一个完全隔离于业务与监控网络的独立 AI 基础设施层。服务器环境为 HP 物理机(IP: 192.168.18.100),操作系统采用 Ubuntu 22.04,所有组件均通过 Docker 容器化运行,确保环境一致性与部署效率。
整体架构采用 Milvus 作为核心向量检索引擎,负责海量向量数据的存储与相似度检索;Etcd 承担元数据管理职责,保证集群状态的一致性;MinIO 作为底层对象存储,为向量数据提供持久化能力;Attu 则是可视化管理平台,让运维与数据操作变得更加直观。这一组合构成了企业级单机部署的黄金标准,兼顾性能与可靠性。
⚙️ 容器编排配置详解
利用 Docker Compose 进行容器编排,可以极大简化多服务部署的复杂度。以下配置文件定义了四个核心服务的运行参数、端口映射、数据卷挂载以及网络模式。通过统一的 容器编排 策略,各服务在独立网络中自动互通,互不干扰。
在配置中,Milvus 服务暴露 19530 端口用于客户端连接,Attu 映射到宿主机的 18000 端口。值得注意的是,所有服务均未依赖外部网络,实现了纯内网环境的稳定运行。这种基础设施即代码(IaC)的方式,保证了部署的可复现性和可迁移性,为后续的 K8s 集群扩展奠定了基础。
version: '3.5'
services:
etcd:
container_name: milvus-etcd
image: 192.168.18.100:5000/quay.io/coreos/etcd:v3.5.0
command: etcd -advertise-client-urls http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379
volumes:
- ./volumes/etcd:/etcd
restart: always
networks:
- milvus_network
storage:
container_name: milvus-minio
image: 192.168.18.100:5000/minio/minio:RELEASE.2023-03-20T20-16-18Z
environment:
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: minioadmin
command: server /data
volumes:
- ./volumes/minio:/data
restart: always
networks:
- milvus_network
standalone:
container_name: milvus-standalone
image: 192.168.18.100:5000/milvusdb/milvus:v2.3.0
command: ["milvus", "run", "standalone"]
environment:
ETCD_ENDPOINTS: etcd:2379
MINIO_ADDRESS: storage:9000
volumes:
- ./volumes/milvus:/var/lib/milvus
ports:
- "19530:19530"
- "9091:9091"
depends_on:
- "etcd"
- "storage"
restart: always
networks:
- milvus_network
attu:
container_name: milvus-attu
image: 192.168.18.100:5000/zilliz/attu:latest
ports:
- "18000:3000"
environment:
- MILVUS_URL=milvus-standalone:19530
depends_on:
- standalone
restart: always
networks:
- milvus_network
networks:
milvus_network:
driver: bridge
镜像导入与一键启动流程
在纯内网环境中,镜像的获取与分发是首要难题。这里采用先在有网环境拉取镜像,再导出为 tar 包,最后导入内网私有仓库(192.168.18.100:5000)的策略。这种方式不仅安全可控,还能确保生产环境与开发环境使用完全一致的镜像版本,避免版本不一致带来的兼容性问题。
以下脚本展示了完整的镜像导入与推送流程,通过循环遍历镜像列表,自动完成 docker pull、docker tag 与 docker push 操作,实现了镜像资产的高效管理与分发。
# 1. 加载镜像
docker load -i milvus-only-3-images.tar
docker load -i attu.tar
# 2. 打标签
docker tag quay.io/coreos/etcd:v3.5.0 192.168.18.100:5000/quay.io/coreos/etcd:v3.5.0
docker tag minio/minio:RELEASE.2023-03-20T20-16-18Z 192.168.18.100:5000/minio/minio:RELEASE.2023-03-20T20-16-18Z
docker tag milvusdb/milvus:v2.3.0 192.168.18.100:5000/milvusdb/milvus:v2.3.0
docker tag zilliz/attu:latest 192.168.18.100:5000/zilliz/attu:latest
# 3. 推送至私有仓库
docker push 192.168.18.100:5000/quay.io/coreos/etcd:v3.5.0
docker push 192.168.18.100:5000/minio/minio:RELEASE.2023-03-20T20-16-18Z
docker push 192.168.18.100:5000/milvusdb/milvus:v2.3.0
docker push 192.168.18.100:5000/zilliz/attu:latest
镜像准备就绪后,即可通过 docker-compose up -d 命令实现一键启动。该命令会按照依赖顺序依次启动 Etcd、MinIO、Milvus 与 Attu 服务,并通过健康检查确保各组件就绪。启动完成后,可以使用 docker-compose ps 查看各服务运行状态。
# 进入部署目录
cd /home/xyy/myapp/project/02-AI
# 启动服务
docker-compose up -d
# 停止服务
docker-compose down
# 查看运行状态
docker ps | grep milvus
服务访问与连接配置指南
部署完成后,需要正确配置客户端连接参数。Milvus 向量数据库的访问地址为 ,Attu 可视化管理平台则通过 192.168.18.100:19530 访问。两者分别承担数据操作与可视化管理的职责,形成完整的运维闭环。http://192.168.18.100:18000
在 Attu 中连接 Milvus 时,需要注意以下关键配置项:
- Host:填写服务器真实 IP,而非 localhost,确保跨容器访问可达
- Port:使用 Milvus 服务的映射端口
19530 - SSL:取消勾选「启用 SSL」选项,因为内网环境默认不启用 TLS 加密


| 配置项 | 填写内容 |
|---|---|
| Milvus 地址 | 192.168.18.100:19530 |
| 数据库 | default |
| 用户名 | 空 |
| 密码 | 空 |
| 启用 SSL | 关闭 |
️ 运维管理与故障排查实践
容器化部署的优势在于运维的便捷性。通过 docker-compose logs 可以实时查看服务日志,docker-compose restart 能够快速重启异常服务。这些命令构成了日常运维的基础工具箱,让问题定位与恢复变得高效。
# 查看Milvus日志
docker logs -f milvus-standalone
# 查看Attu日志
docker logs -f milvus-attu
# 重启服务
docker-compose restart
# 查看容器状态
docker-compose ps
在实际部署过程中,我们总结了几个高频问题的解决方案:
- Milvus 无限重启:通常是启动参数缺失导致,需要在 docker-compose.yml 中补充
参数,确保 Etcd 元数据正确初始化。run - Attu 无法连接 Milvus:先检查是否启用了 SSL,内网环境应取消该选项;同时确认使用主机真实 IP 而非 127.0.0.1。
- 端口冲突:当业务服务占用 8080/8081/8082 等常用端口时,可将 Attu 调整至 18000 端口,避免资源竞争。
- 容器间网络不通:所有服务需统一使用
网桥,确保自动 DNS 解析与容器间通信正常。milvus_network
command: ["milvus", "run", "standalone"]
端口规划与项目价值总结
合理的端口规划是保证多服务共存的前提。下表列出了本次部署涉及的所有端口及其用途,为后续扩展提供参考:
| 端口 | 用途 |
|---|---|
| 19530 | Milvus 向量数据库服务 |
| 9091 | Milvus 监控端口 |
| 18000 | Attu 可视化管理平台(避开业务 8080 端口冲突) |
本次部署方案的核心价值体现在多个维度:纯内网环境运行,无外网依赖,满足企业安全合规要求;基础设施即代码,通过容器编排实现一键部署、可复现、可迁移;企业级单机架构,为 AI 项目提供稳定可靠的生产级存储底座。同时,Attu 可视化平台大幅降低了运维门槛,让向量数据的日常管理变得直观高效。
从技术演进角度看,这套容器化部署方案天然适配未来的 Kubernetes 集群化改造。通过将 Docker Compose 配置转换为 K8s 部署清单,可以实现从单机到多节点的平滑升级,为应对更大规模的向量检索需求做好准备。这也体现了容器化部署在 AI 基础设施领域的长期价值。
[AFFILIATE_SLOT_1]对于正在构建 RAG 应用或知识库系统的开发者而言,这套方案提供了从零到一的完整参考路径。无论是个人项目还是企业级应用,都能从中获得可落地的实践指导。后续将持续输出多节点集群部署、K8s 编排、AI 应用开发等实战内容,欢迎保持关注。
[AFFILIATE_SLOT_2]✅ 本文基于真实生产环境,提供了一套纯内网、可直接执行的 Milvus 容器化部署方案。通过 Docker Compose 实现了 Milvus、Etcd、MinIO、Attu 的无缝集成,为 AI 项目的数据底座建设提供了标准化范式。这套方案不仅适用于「商助慧」项目,也可作为各类知识库与向量检索系统的部署参考。
浙公网安备 33010602011771号