文章目录
问题
我的需求是做混合检索单机版可以满足,要走Docker
容器部署,还需要和另一个容器中的程序做通信。官方文档提供的Milvus
安装启动Milvus
方案,见文档:传送门
我在开始这里就挂了,
bash standalone_embed.sh start
创建的容器无法启动,可能和我的本地docker
有关。
预备知识
先了解一个预备知识哈,有没有向我一样是从GitHub
上的pymilvus
慕名而来的,这个pymilvus
的定位是一个SDK(Software Development Kit)
,是个工具,它需要搭配一个Milvus
实例,也就是Milvus
服务器,总结,使用过程需要的组合:
milvus SDK
(本文的pymilvus
)Milvus
服务器(本文的Milvus
容器)
另外,Docker
容器和宿主机本身在同一个内网中,本身是可以互相通信的,你能在内网中找到两者的ip
。
方案
我的时空中(2024-04),目前最新版
milvus2.4.0
获取pymilvus
pip install pymilvus pip install pymilvus[model]
第二个指令可选,我需要bge-m3
,所以也装了,官方文档有介绍,这里过了哈。
获取milvus 实例
通过docker-compose
+ xxx.yml
文件实现
wget https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -O docker-compose.yml sudo:docker-compose up -d
小插曲
如果你和我一样,执行docker-compose up -d
,报这种错,
试试这样解决:
sudo apt install docker-compose
多容器通信
我的场景是,Milvus
实例本身独占一个容器containtorA
,我的混合检索程序在另一个容器containtorB
,检索程序需要向指定端口(默认Port:19530
)发送请求,这个请求需要Milvus
实例去处理。所以这是个容器通信问题?
是也不是,本质是容器和宿主机通信,具体来说,容器A内的应用程序向宿主机的端口发送请求,而这个端口被容器B监听,间接地完成了容器A、B间的通信。也就是说,容器间的直接通信方案有时候也可以通过间接通信实现。
我这里的间接通信是这样实现的,在pymilvus
相关程序的请求中这样填写(ifconfig
一下),
connections.connect("default", host="<宿主机IP地址>", port="19530")
最后结果是有三个容器在运行
去宿主机上查看Milvus
监听状态