docker-compose 部署#
部署minio#
首选会使用到 Minio 因为我之前配过,所以这里直接使用了即可。 注意需要自己的 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD
text
services:
minio:
image: minio/minio:RELEASE.2025-04-22T22-12-26Z
container_name: minio
ports:
- "49110:9000"
- "49111:9001"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: pass
command: server /data --console-address ":9001"
volumes:
- ./data:/data
#- /data/minio_data:/data
- ./config:/root/.minio
networks:
- mynetwork
networks:
mynetwork:
external: true
milvus 其他的服务#
注意修改MINIO_ACCESS_KEY_ID 和MINIO_SECRET_ACCESS_KEY 的值。
text
version: '3.5'
services:
# 1. Etcd: 仅内部访问,不暴露端口
etcd:
container_name: milvus-etcd
image: quay.io/coreos/etcd:v3.5.5
environment:
- ETCD_AUTO_COMPACTION_MODE=revision
- ETCD_AUTO_COMPACTION_RETENTION=1000
- ETCD_QUOTA_BACKEND_BYTES=4294967296
- ETCD_SNAPSHOT_COUNT=50000
volumes:
- ./volumes/etcd:/etcd
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
healthcheck:
test: ["CMD", "etcdctl", "endpoint", "health"]
interval: 30s
timeout: 20s
retries: 3
networks:
- mynetwork
# 2. Milvus Standalone: 核心服务 (开启鉴权)
standalone:
container_name: milvus-standalone
image: milvusdb/milvus:v2.5.0
command: ["milvus", "run", "standalone"]
security_opt:
- seccomp:unconfined
environment:
# 连接内部 Etcd
ETCD_ENDPOINTS: etcd:2379
# 连接外部 MinIO (使用容器名 minio 和容器内部端口 9000)
MINIO_ADDRESS: minio:9000
# 使用你提供的 MinIO 账号密码
MINIO_ACCESS_KEY_ID: admin
MINIO_SECRET_ACCESS_KEY: pass
MINIO_BUCKET_NAME: milvus-bucket # 建议指定一个 Bucket
volumes:
- ./volumes/milvus:/var/lib/milvus
# 挂载刚才创建的配置文件,强制开启鉴权
- ./volumes/milvus/configs/milvus.yaml:/milvus/configs/milvus.yaml
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
interval: 30s
start_period: 90s
timeout: 20s
retries: 3
ports:
- "19530:19530" # RPC 端口,对外暴露用于代码连接
- "9091:9091" # HTTP 端口,用于健康检查
depends_on:
- "etcd"
networks:
- mynetwork
# 3. Attu: Web UI (也会要求输入密码)
attu:
container_name: attu
image: zilliz/attu:v2.4.0
environment:
MILVUS_URL: standalone:19530
ports:
- "8000:3000" # Web UI 对外端口
depends_on:
- "standalone"
networks:
- mynetwork
# 引入外部网络
networks:
mynetwork:
external: true
先启动 Minio 然后启动这个 docker-compose 的文件。 一开始启动会报错,不要急。
text
# 1. 停止容器
docker compose down
# 2. 删除旧配置
rm -rf ./volumes/milvus/configs/milvus.yaml
用命令拉取官方原版:
text
# 确保目录存在
mkdir -p ./volumes/milvus/configs
# 下载官方 v2.5.0 配置
wget -O ./volumes/milvus/configs/milvus.yaml https://raw.githubusercontent.com/milvus-io/milvus/v2.5.0/configs/milvus.yaml
修改配置开启鉴权
text
vim ./volumes/milvus/configs/milvus.yaml
输入 /authorizationEnabled 回车搜索。
找到 authorizationEnabled: false。
一定要改成 authorizationEnabled: true。
保存退出 (:wq)。
重新启动即可: docker compose up -d

Milvus 开启鉴权后的默认初始账号密码如下:
- 用户名 (Username):
root - 密码 (Password):
Milvus(注意:M 是大写的)
登录进去后修改密码即可:

容器说明#
1. milvus-standalone (核心大脑)#
- 角色: 图书管理员 / 计算中心
- 你的端口:
19530(代码连接用),9091(监控用) - 它是干嘛的: 这是 Milvus 的本体。它不直接存书(数据文件),也不记账(元数据)。 它的工作全是脑力活:
- 你发给它一句话,它负责指挥怎么存。
- 你问它“这书在哪?”,它负责去算向量距离(用你强大的 CPU 进行数学计算)。
- 它是整个系统的CPU,负责逻辑和计算。
2. minio (大仓库)#
- 角色: 书架 / 仓库
- 你的端口:
9000(存取接口),9001(网页后台) - 它是干嘛的: 这是对象存储(相当于开源版的 AWS S3)。 Milvus 产生的所有**“干货”**都扔在这里面:
- 你插入的一百万条向量数据。
- 建立好的索引文件。
- 系统的日志。
- 重点: 如果你把这个容器删了,你的数据就全没了。Milvus 本身是个空壳,数据都在 MinIO 里。
3. milvus-etcd (记账本)#
- 角色: 目录索引卡 / 记账员
- 你的端口:
2379(内部通信) - 它是干嘛的: 这是元数据存储。它存的不是具体的书(数据),而是关于书的信息:
- “现在又几个表(Collection)?”
- “这个表有几个字段?”
- “MinIO 里的那个文件,属于哪张表?”
- 重点: 它负责记录系统的状态。如果没有它,Milvus 就算有数据(在 MinIO 里),也不知道这些数据是谁的,系统就会变“痴呆”。
4. attu (前台接待)#
- 角色: 触摸屏查询机 / 门面
- 你的端口:
8000(浏览器访问) - 它是干嘛的: 这是可视化管理界面。 Milvus 本身是黑乎乎的命令行工具,Attu 给了你一个漂亮的网页:
- 让你能用鼠标点一点就看到库里有多少数据。
- 测试向量搜索。
- 修改密码(你刚才就在这改的)。
- 它其实就是一个网页程序,它在后台悄悄调用 Milvus 的接口(19530)帮你干活。
评论
还没有评论,来发第一个吧
