docker compose是部署milvus单机版的首选方式,因其能统一管理etcd、minio、milvus三组件的网络、卷挂载与启动顺序,避免手动部署时因健康检查时序错乱导致的连接超时等问题。

直接用 Docker Compose 部署是最稳妥的选择,源码编译在普通生产环境里既没必要、又容易卡在 Go/CMake/依赖库版本上,尤其对没维护过 C++ 项目的用户来说,make milvus 失败十次有九次是 knowhere 或 faiss 编译不通过。
为什么 Docker Compose 是首选安装方式
官方已将 standalone 模式作为默认推荐路径,v2.5+ 版本彻底弃用旧版单机二进制部署;etcd + minio + milvus 三组件耦合紧密,手动拉起极难对齐健康检查时序。你看到的“连接超时”“context deadline exceeded”几乎都源于 etcd 启动慢于 milvus 初始化重试窗口。
- 所有服务(etcd/minio/milvus)由 compose 统一管理网络、卷挂载和启动顺序
-
healthcheck配置必须保留,否则milvus-standalone容器会在 etcd 还没 ready 时就报错退出 - 不要改
ETCD_ENDPOINTS: etcd:2379为localhost:2379——容器内 localhost 不指向宿主机 - 内存低于 6GB 时,建议在
milvus.yaml中调低cache.memoryLimit,否则 OOM killer 会干掉 etcd
docker-compose.yml 必须修改的关键项
官网下载的 milvus-standalone-docker-compose.yml 默认不带 Attu 可视化界面,也不暴露配置文件路径,直接运行等于“黑盒启动”。必须手动补两处:
- 在
standalone服务下加挂载:./milvus.yaml:/milvus/configs/milvus.yaml,否则改配置无效 - 新增
attu服务块(官方镜像zilliz/attu:v2.6.0),端口映射到8080:3000 -
MINIO_ADDRESS必须写成minio:9000,不是localhost:9000或127.0.0.1:9000 - 若要持久化数据,把
${DOCKER_VOLUME_PATH:-./volumes/milvus/db}改成绝对路径,比如/opt/milvus/db
启动后连不上 19530 端口的常见原因
不是防火墙问题,90% 是容器网络或 healthcheck 失败导致 milvus 进程根本没起来。先执行 docker-compose ps 看状态,再看日志:
-
docker-compose logs -f standalone—— 如果反复出现failed to create etcd client,说明 etcd 没通过 healthcheck,等 2 分钟再试或删掉 volumes 重跑 -
curl http://localhost:19530/version返回空或 connection refused → 检查standalone容器是否在Up (healthy)状态,不是Up (unhealthy) - 宝塔面板用户注意:宝塔自带防火墙默认禁用 19530 和 9000 端口,需手动放行
- 云服务器(阿里云/腾讯云)务必检查安全组规则,只开 19530 不够,Attu 需要 8080,MinIO 控制台需要 9001
配置 milvus.yaml 的几个硬性限制
很多参数看似能调,但实际有隐含约束。比如改 storage.type 为 s3,却没配 storage.s3 下的 access key,服务直接 crash;又比如把 queryNode.scheduler.maxTaskNum 设太高,会导致 querynode 内存暴涨。
-
dataCoord.enableCompaction在 standalone 模式下必须为true,否则 segment 不合并,磁盘持续涨 -
common.retentionDuration单位是秒,不是小时,设成86400才是 1 天 - 启用 GPU 加速需额外拉取
milvusdb/milvus:v2.6.0-gpu镜像,并在standalone服务中加runtime: nvidia和environment: GPU_ENABLED: true - 日志级别调成
debug会显著拖慢写入性能,仅排障时临时开启
真正麻烦的从来不是装上,而是让 etcd、minio、milvus 三个容器在资源受限的机器上按正确顺序、带着正确参数、用正确网络模式一起活下来——盯住 docker-compose ps 输出里的 healthy 标签,比什么都管用。











