Milvus 向量数据库怎么用:Docker 部署与检索验证

Milvus 是一个开源的向量数据库,主要用来存储和检索高维向量,常见于语义搜索、推荐系统和图片去重等场景。
如果你刚接触 Milvus,最直接的验证方式是先用 Docker 跑起单机版,再通过 Python SDK 完成一次插入和检索。
下面按这个顺序展开,命令和配置可直接复制使用。

跑起来之前先确认环境

单机版 Milvus 依赖 Docker 和 Docker Compose。
在 Linux 服务器或本地开发机上执行:

docker --version
docker compose version

两条命令都能输出版本号即可。
Milvus 单机版默认会启动 etcd、MinIO 和 milvus-standalone 三个容器,需要至少 8GB 内存和 2 核 CPU,磁盘预留 10GB 以上比较稳妥。
如果内存不足,容器可能反复重启,这是新手最容易忽略的前提。

用 Docker Compose 启动单机版

官方提供了单机部署的 compose 文件,直接下载并启动:

wget https://github.com/milvus-io/milvus/releases/download/v2.3.3/milvus-standalone-docker-compose.yml -O docker-compose.yml
docker compose up -d

启动后检查容器状态:

docker compose ps

看到 milvus-standalone、milvus-etcd、milvus-minio 三个服务状态为 running 或 healthy 就表示正常。
Milvus 对外暴露 19530 端口供 SDK 连接,9091 是健康检查端口。
可以用下面的命令快速验证服务是否响应:

curl http://127.0.0.1:9091/healthz

返回 OK 说明服务已就绪。
如果连接的是远程服务器,记得在防火墙或安全组中放行 19530 端口,否则后续 SDK 会连接超时。

安装 Python SDK 并跑通第一个检索

Milvus 提供 pymilvus 包,安装命令:

pip install pymilvus==2.3.4

版本尽量与 Milvus 服务端主版本保持一致,避免协议不兼容。
下面是一段完整的示例,包含创建集合、插入三条向量、按相似度检索:

from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection

connections.connect(host="127.0.0.1", port="19530")

fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
    FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=4),
]
schema = CollectionSchema(fields, description="demo")
collection = Collection(name="demo_collection", schema=schema)

collection.insert([
    [1, 2, 3],
    [[0.1, 0.2, 0.3, 0.4], [0.2, 0.1, 0.5, 0.3], [0.9, 0.8, 0.7, 0.6]],
])
collection.create_index(field_name="vector", index_params={"index_type": "IVF_FLAT", "metric_type": "L2", "params": {"nlist": 128}})
collection.load()

res = collection.search(
    data=[[0.1, 0.2, 0.3, 0.4]],
    anns_field="vector",
    param={"metric_type": "L2", "params": {"nprobe": 10}},
    limit=2,
)
for hit in res[0]:
    print(hit.id, hit.distance)

预期输出会打印两条最相似记录的 id 和距离。dim=4 只是演示用,实际业务中向量维度由你的嵌入模型决定,比如 768 或 1024。
插入数据后必须调用 create_index 和 load 才能检索,这是 Milvus 与普通数据库操作习惯不同的地方。

常见连接与检索报错怎么排查

连接被拒绝或超时:先确认 docker compose ps 中三个容器都在运行,再用 curl http://127.0.0.1:9091/healthz 检查服务端。
远程连接时检查端口是否放行,以及 Python 脚本里的 host 是否填了服务器公网 IP。

报错 collection not loaded:检索前漏掉了 collection.load(),或者集合刚创建索引后需要等待加载完成。
可以在代码中调用 collection.load() 后加一个短暂等待,或者用 utility.load_state() 查看加载状态。

插入维度不一致:检查 FieldSchema 中 dim 是否与插入向量的长度一致,维度不匹配会直接抛异常,不会静默截断。

验证与下一步

跑通示例后,可以打开 Attu(Milvus 的图形化管理工具)查看集合结构和数据量,确认插入与索引是否生效。
后续如果要做批量导入,建议使用 collection.insert 分批提交,避免单次数据过大导致内存压力。

需要提醒的是,单机版适合开发和测试,生产环境通常需要集群部署和更细的资源配置。
如果检索结果不符合预期,优先检查度量类型(L2 与 IP 的选择)和索引参数,而不是盲目重建集合。

常见疑问

Milvus 和普通数据库有什么区别? 普通数据库按字段精确匹配,Milvus 按向量距离找相似项,适合语义层面的模糊匹配。

一定要用 Docker 吗? 不是必须,但 Docker 是官方推荐且最容易复现的方式,手动编译安装的依赖更多,新手不建议一开始就走这条路。

插入数据后为什么搜不到? 最常见原因是集合未加载或索引未创建,按上文顺序检查 create_index 和 load 是否都执行成功。

分享到:
上一篇
Weaviate 本地 Docker 部署与向量检索入门
下一篇
Chroma 向量数据库怎么用:Python 本地写入与查询验证
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意