一、核心步骤总述
「安装 Docker 环境 → 配置 Docker 核心参数 → 开放端口 → 部署 Milvus → 部署 Attu」
二、完整核心命令
阶段 1:安装 Docker 及 Docker Compose(基础环境)
bash
# 1. 安装依赖工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

bash
# 2. 添加 Docker 官方源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum clean all && sudo yum makecache

中间有报错的命令, 请忽略!!!
bash
# 3. 安装 Docker 引擎(自动安装最新稳定版)
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

bash
# 4. 启动 Docker 并设置开机自启
sudo systemctl start docker && sudo systemctl enable docker
# 5. 验证 Docker 安装成功(输出版本即正常)
sudo docker --version
sudo docker compose version
sudo docker run hello-world
阶段 2:配置 Docker(镜像源 + 共享内存,Milvus 必需)
先说遇到的坑:
[root@iZ7xvg95b816r5dah90go7Z ~]# sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
问题是国内无法访问https://registry-1.docker.io/v2/, 需要配置国内镜像源.
bash
# 1. 写入 Docker 核心配置(国内镜像源+共享内存, 这两个我都测试了, 可以访问)
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.m.daocloud.io/", "https://mirror.aliyuncs.com/"],
"default-shm-size": "2g"
}
EOF
# 2. 重启 Docker 使配置生效
sudo systemctl daemon-reload && sudo systemctl restart docker
# 3. 验证配置(显示镜像源即生效)
docker info | grep "Registry Mirrors" -A 2

bash
# 4. 测试能否下载镜像
sudo docker run hello-world

阶段 3:开放阿里云安全组端口(远程访问关键,控制台操作)
(需在阿里云 ECS 控制台手动配置,命令无法替代)
-
登录阿里云 ECS 控制台 → 目标实例 → 「安全组」→ 「配置规则」

-
添加入方向规则 2 条:
-
「Milvus 远程访问」: 端口 19530/19530(TCP),访问来源 0.0.0.0/0

3000/3001 都可以, 默认 3000, 我这里是因为 3000 被占用了, 所以改成 3001
-
「Milvus-Attu 可视化工具」: 端口 3001/3001(TCP),访问来源 0.0.0.0/0

-
-
保存规则(实时生效)
阶段 4:部署 Milvus 最新稳定版(v2.4.17)
bash
# 1. 创建工作目录并进入
mkdir -p /root/milvus_compose && cd /root/milvus_compose
# 2. 下载 Milvus 配置文件(国内加速)
wget https://mirror.ghproxy.com/https://github.com/milvus-io/milvus/releases/download/v2.4.17/milvus-standalone-docker-compose.yml -O docker-compose.yml

# 3. (可选)限制 Milvus 内存(适配 2核1.8G 服务器)
sudo tee -a docker-compose.yml <<-'EOF'
deploy:
resources:
limits:
memory: 1.2G
EOF
# (注:上述命令会在 standalone 服务末尾添加内存限制,若手动编辑更稳妥,直接执行也可)
# 4. 启动 Milvus(自动拉取镜像,后台运行)
docker compose up -d

# 5. 验证 Milvus 启动成功(3个容器均为 Up 即正常)
docker compose ps

阶段 5:部署 Attu 可视化工具(3001 端口避冲突), MILVUS_URL皇冠城你自己的 ip
bash
# 1. 清理残留 Attu 容器
docker rm -f $(docker ps -aqf "name=attu") 2>/dev/null
# 2. 启动最新版 Attu,映射 3001 端口
docker run -d -p 3001:3000 -e MILVUS_URL=[你自己的 ip]:19530 zilliz/attu:latest
# 3. 验证 Attu 启动成功
docker ps | grep attu

阶段 6:验证 Milvus 可用性(本地+远程)
bash
# 1. 服务器本地验证(安装 Python 客户端并测试连接)
pip install pymilvus --upgrade
python -c "from pymilvus import connections; connections.connect('localhost', 19530); print('✅ Milvus 连接成功!')"
# 2. 远程访问(本地电脑操作)
# 浏览器打开:http://8.163.12.157:3001
# Python 远程连接代码:
# from pymilvus import connections; connections.connect(host='8.163.12.157', port='19530'); print('✅ 远程连接成功!')
在浏览器打开 attu


三、调用 Docker Compose V2 工具的关键命令
| 操作需求 | 核心命令 |
|---|---|
| 停止 Milvus 服务 | docker compose down |
| 后台启动 Milvus 服务 | docker compose -up -d |
| 快速重启正在运行的 Milvus 服务 | docker compose restart |
| 查看所有容器的状态 | docker compose ps |
| 查看 Milvus 日志 | docker compose logs -f standalone |
| 停止 Attu 工具 | docker stop $(docker ps -qf "name=attu") 2>/dev/null |
| 重新启动 Attu 工具 | docker run -d -p 3001:3000 -e MILVUS_URL=8.163.12.157:19530 zilliz/attu:latest |
| 彻底清理 Attu 容器 | docker rm -f $(docker ps -aqf "name=attu") |
| 清理 Milvus 数据(重新部署用) | docker compose down -v |
关键命令说明:
-
docker compose psNAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
milvus-etcd quay.io/coreos/etcd:v3.5.5 "etcd -advertise-cli..." etcd 2小时前 Up 2小时(healthy) 2379-2380/tcp
milvus-minio minio/minio:RELEASE.2023-03-20T20-16-18Z "/usr/bin/docker-ent..." minio 2小时前 Up 2小时(healthy) 9000-9001/tcp
milvus-standalone milvusdb/milvus:v2.4.17 "/tini -- milvus run..." standalone 2小时前 Up 2小时(healthy) 0.0.0.0:19530->19530/tcp, 0.0.0.0:9091->9091/tcp
核心结果字段解读:
- NAME:容器名称(对应服务名 + 前缀);
- STATUS:容器状态(关键!):
- Up (healthy):正常运行(健康状态,最优);
- Up:运行中,但未做健康检查(也正常);
- Exited (代码):容器已退出(异常,需看日志排查);
- PORTS:端口映射(确认 19530 端口是否正常映射)。
docker compose up -d
docker compose up -d(注意是 up 不是 -up,少个横杠)启动的容器,正是由当前目录下的 docker-compose.yml 文件指定的------ 这个文件是 Docker Compose 的 "配置清单",里面写清了要启动哪些服务(容器)、用什么镜像、端口映射、依赖关系等核心信息。
以部署的 Milvus 为例,docker-compose.yml 里定义了 3 个服务,所以会启动 3 个容器:- standalone:Milvus 核心服务容器(镜像 milvusdb/milvus:v2.4.17);
- etcd:Milvus 依赖的元数据存储容器(镜像 quay.io/coreos/etcd:v3.5.5);
- minio:Milvus 依赖的对象存储容器(镜像 minio/minio:RELEASE.2023-03-20T20-16-18Z)。

所以在执行docker compose up -d时, 必须在 docker-compose.yml 所在目录执行命令
其他问题:
问题 1: You don't have permission to access the database: default

这个错误提示 You don't have permission to access the database: default 是因为 Milvus 2.2.x 版本默认启用了数据库权限控制,而 Attu 连接时没有正确的权限导致的。解决方法很简单,两步即可:
- 第一步:在服务器上修改 Milvus 配置(允许访问 default 数据库),
- 编辑 docker-compose.yml 文件,添加一行配置(允许默认数据库访问):- MILVUS_AUTHORIZATION_ENABLE=false # 关闭权限校验(适合测试环境)
- 找到 environment 节点(默认提供的配置里已经有 ETCD_ENDPOINTS、MINIO_ADDRESS 这两行);
- 在这两行下面新增一行:MILVUS_AUTHORIZATION_ENABLE=false;
yaml
standalone:
container_name: milvus-standalone
image: milvusdb/milvus:v2.2.8
command: ["milvus", "run", "standalone"]
environment:
ETCD_ENDPOINTS: etcd:2379
MINIO_ADDRESS: minio:9000
MILVUS_AUTHORIZATION_ENABLE: false # 新增这一行,关闭权限校验
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus
ports:
- "19530:19530"
- "9091:9091"
depends_on:
- "etcd"
- "minio"
- 保存后重启:
bash
docker compose down && docker compose up -d
这样 Milvus 就会关闭权限校验,Attu 就能正常连接 default 数据库了。
- 第二步:重新用 Attu 连接