【Bug】docker容器之间网络通讯失败

server/2024/10/17 14:58:12/

目录

  • 报错起因
  • 报错内容
  • 解决方案

报错起因

我启动了Milvus数据库

# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED             STATUS                    PORTS                                                                                      NAMES
1099dda8c0fa   milvusdb/milvus:v2.4.1       "/tini -- milvus run…"   17 minutes ago      Up 17 minutes (healthy)   0.0.0.0:9091->9091/tcp, :::9091->9091/tcp, 0.0.0.0:19530->19530/tcp, :::19530->19530/tcp   milvus-standalone
acafc6ef57bc   quay.io/coreos/etcd:v3.5.5   "etcd -advertise-cli…"   17 minutes ago      Up 17 minutes (healthy)   2379-2380/tcp                                                                              milvus-etcd
587d1ee57611   minio/minio:latest           "/usr/bin/docker-ent…"   17 minutes ago      Up 17 minutes (healthy)   0.0.0.0:9000-9001->9000-9001/tcp, :::9000-9001->9000-9001/tcp                              milvus-minio

可以看到运行都很正常,但是我在另外一个容器中写代码访问19530端口,失败
另外这个容器在启动时(docker run)未设置--network host

报错内容

Traceback (most recent call last):File "/home/rag/startup.py", line 910, in <module>client = MilvusClient(uri=Milvus_Client_URI,db_name=Milvus_DB_NAME)File "/root/miniconda3/lib/python3.10/site-packages/pymilvus/milvus_client/milvus_client.py", line 60, in __init__self._using = self._create_connection(File "/root/miniconda3/lib/python3.10/site-packages/pymilvus/milvus_client/milvus_client.py", line 728, in _create_connectionraise ex from exFile "/root/miniconda3/lib/python3.10/site-packages/pymilvus/milvus_client/milvus_client.py", line 725, in _create_connectionconnections.connect(using, user, password, db_name, token, uri=uri, **kwargs)File "/root/miniconda3/lib/python3.10/site-packages/pymilvus/orm/connections.py", line 449, in connectconnect_milvus(**kwargs, user=user, password=password, token=token, db_name=db_name)File "/root/miniconda3/lib/python3.10/site-packages/pymilvus/orm/connections.py", line 400, in connect_milvusgh._wait_for_channel_ready(timeout=timeout)File "/root/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py", line 150, in _wait_for_channel_readyraise MilvusException(
pymilvus.exceptions.MilvusException: <MilvusException: (code=2, message=Fail connecting to server on 172.17.0.2:19530, illegal connection params or server unavailable)>

这里的172.17.0.2来自于

import socketdef get_ip_address():s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)try:# doesn't even have to be reachables.connect(('10.254.254.254', 1))IP = s.getsockname()[0]except Exception:IP = '127.0.0.1'finally:s.close()return IPhost = get_ip_address()

后面尝试更换为0.0.0.0

Traceback (most recent call last):File "/root/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py", line 147, in _wait_for_channel_readygrpc.channel_ready_future(self._channel).result(timeout=timeout)File "/root/miniconda3/lib/python3.10/site-packages/grpc/_utilities.py", line 162, in resultself._block(timeout)File "/root/miniconda3/lib/python3.10/site-packages/grpc/_utilities.py", line 106, in _blockraise grpc.FutureTimeoutError()
grpc.FutureTimeoutErrorThe above exception was the direct cause of the following exception:Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/root/miniconda3/lib/python3.10/site-packages/pymilvus/orm/connections.py", line 449, in connectconnect_milvus(**kwargs, user=user, password=password, token=token, db_name=db_name)File "/root/miniconda3/lib/python3.10/site-packages/pymilvus/orm/connections.py", line 400, in connect_milvusgh._wait_for_channel_ready(timeout=timeout)File "/root/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py", line 150, in _wait_for_channel_readyraise MilvusException(
pymilvus.exceptions.MilvusException: <MilvusException: (code=2, message=Fail connecting to server on 0.0.0.0:19530, illegal connection params or server unavailable)>

更换为127.0.0.1

Traceback (most recent call last):File "/root/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py", line 147, in _wait_for_channel_readygrpc.channel_ready_future(self._channel).result(timeout=timeout)File "/root/miniconda3/lib/python3.10/site-packages/grpc/_utilities.py", line 162, in resultself._block(timeout)File "/root/miniconda3/lib/python3.10/site-packages/grpc/_utilities.py", line 106, in _blockraise grpc.FutureTimeoutError()
grpc.FutureTimeoutErrorThe above exception was the direct cause of the following exception:Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/root/miniconda3/lib/python3.10/site-packages/pymilvus/orm/connections.py", line 449, in connectconnect_milvus(**kwargs, user=user, password=password, token=token, db_name=db_name)File "/root/miniconda3/lib/python3.10/site-packages/pymilvus/orm/connections.py", line 400, in connect_milvusgh._wait_for_channel_ready(timeout=timeout)File "/root/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py", line 150, in _wait_for_channel_readyraise MilvusException(
pymilvus.exceptions.MilvusException: <MilvusException: (code=2, message=Fail connecting to server on 127.0.0.1:19530, illegal connection params or server unavailable)>

以上都是无效的

解决方案

首先查看容器所在网段

docker network ls

得到

NETWORK ID     NAME             DRIVER    SCOPE
738c89ed339b   bridge           bridge    local
62ec1478cea1   host             host      local
5dc70a167a10   milvus           bridge    local
4d746c095f03   minio_default    bridge    local
40c6e5fbe685   mysql8_default   bridge    local
b101e25dcb4e   nginx_default    bridge    local

接下来查看milvus的IP信息

docker network inspect milvus

得到

[{"Name": "milvus","Id": "5dc70a167a103d723fe81bc0feb95b996995d3d464f9601ce9c52d10342e3a6c","Created": "2024-10-12T13:55:27.648549485+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": null,"Config": [{"Subnet": "172.18.0.0/16","Gateway": "172.18.0.1"}]},"Internal": false,"Attachable": true,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"40fd07ae3cdb975afedaf9861117aae38cddb0e63c977d14891d4af860c2885d": {"Name": "eager_solomon","EndpointID": "a9b87ca7cb773953361e58b761b20f2d90f9a0c222dc2ce1fca08238dd0cb1cf","MacAddress": "02:42:ac:12:00:05","IPv4Address": "172.18.0.5/16","IPv6Address": ""},"6453a43e6cfa6b13b5a043bf62255447dbef1ce86876bdcdee55f6520f651bb5": {"Name": "milvus-minio","EndpointID": "e977606fab9781521fa9dfcd8fcdec032b58daca9d7449cbc338c78ecbca1646","MacAddress": "02:42:ac:12:00:03","IPv4Address": "172.18.0.3/16","IPv6Address": ""},"957671f5a506146d5381e26f8afc22c5d2c5566678043a054d2cc4d0febd8873": {"Name": "milvus-etcd","EndpointID": "4c0c44610d15254f53ea9839d34bdbf841427fcf6f7ef097b82c95694b5422c4","MacAddress": "02:42:ac:12:00:02","IPv4Address": "172.18.0.2/16","IPv6Address": ""},"e6c952ee5bd431adf2c5bb3daf643612a4811f5155c46d46ac73607a845830ee": {"Name": "milvus-standalone","EndpointID": "9fb76ce838126cf651d43360342b96ad1184b8ba37f4ab92e022ccb5fae38cf0","MacAddress": "02:42:ac:12:00:04","IPv4Address": "172.18.0.4/16","IPv6Address": ""}},"Options": {},"Labels": {"com.docker.compose.network": "milvus","com.docker.compose.project": "milvus","com.docker.compose.version": "1.29.2"}}
]

看到milvus-standalone的IPv4地址为172.18.0.4
最终用这个地址链接成功


http://www.ppmy.cn/server/132508.html

相关文章

React Query 和 React Context

React Query最佳特性之一是你可以在组件树中的任何位置使用查询&#xff1a;你的 <ProductTable> 组件可以在其需要的地方自带数据获取&#xff1a; function ProductTable() {const productQuery useProductQuery()if (productQuery.data) {return <table>...<…

【NVIDIA NIM 黑客松训练营】文生图小应用

项目简介 以下是一个使用 NIM 平台的生成式 AI模型构建的简单 Demo。 Demo使用了模型meta / llama3-70b-instruct和nvidia / consistory&#xff0c;首先是优化了模型meta / llama3-70b-instruct默认的英文输出&#xff0c;使其对中文用户更友好&#xff1b;其次根据用户输入判…

华为HCIP考试改革,实验部分重要性提升,备考需知!

在当今这个行情复杂多变的时代&#xff0c;网络工程师的技能水平评估标准愈发重要&#xff0c;而认证无疑成为了其中关键的衡量尺度之一。 最近&#xff0c;华为认证领域内部传出了一则颇具影响力的消息&#xff1a;HCIP 认证即将增加实验考试&#xff01;想必不少朋友都已有所…

基于springboot实习管理系统

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;…

【JVM】一文详解类加载器

文章目录 类加载器的概述类加载器的分类启动类加载器(Bootstrap ClassLoader )扩展类型加载器(ExClassLoader)系统类加载器(Application ClassLoader )总结 双亲委派机制概念双亲委派机制的优势 ClassLoaderfindClassdefineClassloadClass&#xff0c;findClass&#xff0c;def…

使用DeepKE训练命名实体识别模型DEMO(官方DEMO)

使用DeepKE训练命名实体识别模型DEMO&#xff08;官方DEMO&#xff09; 说明&#xff1a; 首次发表日期&#xff1a;2024-10-10DeepKE资源&#xff1a; 文档&#xff1a; https://www.zjukg.org/DeepKE/网站&#xff1a; http://deepke.zjukg.cn/cnschema&#xff1a; http:/…

Java设计模式梳理:行为型模式(策略,观察者等)

行为型模式 行为型模式关注的是各个类之间的相互作用&#xff0c;将职责划分清楚&#xff0c;使得我们的代码更加地清晰。 策略模式 策略模式太常用了&#xff0c;所以把它放到最前面进行介绍。它比较简单&#xff0c;我就不废话&#xff0c;直接用代码说事吧。 下面设计的…

用示波器观测RC一阶电路零输入响应是否激励必须是方波信号

概述 RC一阶电路是一种简单但非常重要的电路&#xff0c;广泛应用于滤波、信号处理和时间常数分析等领域。在研究RC电路的动态特性时&#xff0c;零输入响应&#xff08;Natural Response&#xff09;是一项关键内容。本文将详细解析用示波器观测RC一阶电路零输入响应时&#…