同一主机下从其他Docker容器连接Milvus独立版服务器失败求助
问题描述
通过默认Milvus docker-compose.yml文件启动Milvus独立版,生成三个容器。同一主机上另一Docker容器内的任务无法连接Milvus服务器,已确认该容器与Milvus处于同一Docker网络,且能ping通Milvus容器IP(192.168.192.4)。
任务容器中执行的连接代码:
connections.connect( alias="default", host='192.168.192.4', port='19530', secure=False )
报错日志:
Traceback (most recent call last): File "task.py", line 45, in secure=True File "/usr/local/lib/python3.7/site-packages/pymilvus/orm/connections.py", line 262, in connect connect_milvus(**kwargs, password=password) File "/usr/local/lib/python3.7/site-packages/pymilvus/orm/connections.py", line 233, in connect_milvus gh._wait_for_channel_ready() File "/usr/local/lib/python3.7/site-packages/pymilvus/client/grpc_handler.py", line 118, in _wait_for_channel_ready raise MilvusException(Status.CONNECT_FAILED, f'Fail connecting to server on {self._address}. Timeout') pymilvus.exceptions.MilvusException: <MilvusException: (code=2, message=Fail connecting to server on 192.168.192.4:19530. Timeout)>
排查与解决办法
- 确认Milvus端口监听范围
进入Milvus容器,执行netstat -tulpn | grep 19530,检查端口是否绑定在0.0.0.0(允许所有IP访问)。如果仅绑定127.0.0.1,则容器外部无法访问,需修改Milvus配置文件中的grpc.listenAddress为0.0.0.0:19530后重启服务。 - 使用Docker容器名称连接
同一Docker网络内,直接用Milvus容器的名称(默认是milvus-standalone)替代IP作为host参数,Docker内部DNS会自动解析:connections.connect( alias="default", host='milvus-standalone', port='19530', secure=False ) - 测试端口连通性
在任务容器中执行nc -zv 192.168.192.4 19530或telnet 192.168.192.4 19530,确认端口是否开放。ping通仅说明网络可达,不代表端口能正常接收连接。 - 检查Milvus服务状态
在主机上运行docker-compose logs milvus-standalone,查看启动日志,确认Milvus是否成功启动,以及依赖的etcd、minio容器是否正常运行。如果依赖服务异常,Milvus无法提供正常连接。 - 核对pymilvus与Milvus版本兼容性
确保任务容器中的pymilvus版本与Milvus服务器版本完全匹配(大版本和小版本都要一致),版本不兼容会导致连接超时或协议不匹配。比如Milvus 2.2.10对应pymilvus 2.2.10。
内容的提问来源于stack exchange,提问作者Bernard Esterhuyse
相关产品推荐
相关产品推荐

