无法在 docker 内使用 Pymilvus 连接到 Milvus。MilvusException:(代码=2,消息=无法连接到本地主机上的服务器:19530。超时)

joh*_*ers 5 docker etcd docker-compose fastapi milvus

我正在尝试使用 Pymilvus 连接到 Milvus 服务器。服务器已启动并正在运行,但我无法连接到它:MilvusException:(代码= 2,消息=无法连接到本地主机上的服务器:19530。超时)

\n

我正在使用 docker compose 运行两者:

\n
version: "3.5"\n\nservices:\n\n  etcd:\n    container_name: milvus-etcd\n    image: quay.io/coreos/etcd:v3.5.0\n    networks:\n      app_net:\n    environment:\n      - ETCD_AUTO_COMPACTION_MODE=revision\n      - ETCD_AUTO_COMPACTION_RETENTION=1000\n      - ETCD_QUOTA_BACKEND_BYTES=4294967296\n    volumes:\n      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd\n    command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd\n\n  minio:\n    container_name: milvus-minio\n    image: minio/minio:RELEASE.2022-03-17T06-34-49Z\n    networks:\n      app_net:\n    environment:\n      MINIO_ACCESS_KEY: minioadmin\n      MINIO_SECRET_KEY: minioadmin\n    volumes:\n      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data\n    command: minio server /minio_data\n    healthcheck:\n      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]\n      interval: 30s\n      timeout: 20s\n      retries: 3\n  \n  standalone:\n    container_name: milvus-standalone\n    image: milvusdb/milvus:v2.1.4\n    networks:\n      app_net:\n        ipv4_address: 172.16.238.10\n    command: ["milvus", "run", "standalone"]\n    environment:\n      ETCD_ENDPOINTS: etcd:2379\n      MINIO_ADDRESS: minio:9000\n    volumes:\n      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus\n    ports:\n      - "19530:19530"\n    depends_on:\n      - "etcd"\n      - "minio"\n\n\n  fastapi:\n    build: ./fastapi\n    command: uvicorn app.main:app --host 0.0.0.0\n    restart: always\n    networks:\n      app_net:\n        ipv4_address: 172.16.238.12\n    environment:\n      MILVUS_HOST: '172.16.238.10'\n    depends_on:\n      - standalone\n    ports:\n      - "80:80"\n    volumes:\n      - pfindertest:/data/fast\n    healthcheck:\n      test: ["CMD", "curl", "-f", "http://127.0.0.1:80"]\n      interval: 30s\n      timeout: 20s\n      retries: 3\n  \n\n\nnetworks:\n  app_net:\n    driver: bridge\n    ipam:\n      driver: default\n      config:\n        - subnet: 172.16.238.0/24\n          gateway: 172.16.238.1\n    \n\nvolumes:\n  pfindertest:  \n
Run Code Online (Sandbox Code Playgroud)\n

Dockerfile

\n
FROM python:3.8\n\nWORKDIR /code\n\nCOPY ./requirements.txt /code/requirements.txt\n\nRUN pip install --no-cache-dir --upgrade -r /code/requirements.txt\n\nCOPY ./app /code/app\n\n
Run Code Online (Sandbox Code Playgroud)\n

主要.py

\n
from fastapi import FastAPI\nimport uvicorn\nfrom pymilvus import connections\n\napp = FastAPI()\n\n@app.get("/")\ndef read_root():\n    return {"Hello": "World"}\n\nconnections.connect(\n  alias="default", \n  host='localhost', \n  port='19530'\n)\n
Run Code Online (Sandbox Code Playgroud)\n

我收到以下错误:

\n
milvus-1-fastapi-1  | Traceback (most recent call last):\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/pymilvus/client/grpc_handler.py", line 115, in _wait_for_channel_ready\nmilvus-1-fastapi-1  |     grpc.channel_ready_future(self._channel).result(timeout=3)\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/grpc/_utilities.py", line 139, in result\nmilvus-1-fastapi-1  |     self._block(timeout)\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/grpc/_utilities.py", line 85, in _block\nmilvus-1-fastapi-1  |     raise grpc.FutureTimeoutError()\nmilvus-1-fastapi-1  | grpc.FutureTimeoutError\nmilvus-1-fastapi-1  | \nmilvus-1-fastapi-1  | During handling of the above exception, another exception occurred:\nmilvus-1-fastapi-1  | \nmilvus-1-fastapi-1  | Traceback (most recent call last):\nmilvus-1-fastapi-1  |   File "/usr/local/bin/uvicorn", line 8, in <module>\nmilvus-1-fastapi-1  |     sys.exit(main())\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1130, in __call__\nmilvus-1-fastapi-1  |     return self.main(*args, **kwargs)\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1055, in main\nmilvus-1-fastapi-1  |     rv = self.invoke(ctx)\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1404, in invoke\nmilvus-1-fastapi-1  |     return ctx.invoke(self.callback, **ctx.params)\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/click/core.py", line 760, in invoke\nmilvus-1-fastapi-1  |     return __callback(*args, **kwargs)\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/uvicorn/main.py", line 404, in main\nmilvus-1-fastapi-1  |     run(\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/uvicorn/main.py", line 569, in run\nmilvus-1-fastapi-1  |     server.run()\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/uvicorn/server.py", line 60, in run\nmilvus-1-fastapi-1  |     return asyncio.run(self.serve(sockets=sockets))\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/asyncio/runners.py", line 44, in run\nmilvus-1-fastapi-1  |     return loop.run_until_complete(main)\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete\nmilvus-1-fastapi-1  |     return future.result()\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/uvicorn/server.py", line 67, in serve\nmilvus-1-fastapi-1  |     config.load()\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/uvicorn/config.py", line 474, in load\nmilvus-1-fastapi-1  |     self.loaded_app = import_from_string(self.app)\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/uvicorn/importer.py", line 21, in import_from_string\nmilvus-1-fastapi-1  |     module = importlib.import_module(module_str)\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module\nmilvus-1-fastapi-1  |     return _bootstrap._gcd_import(name[level:], package, level)\nmilvus-1-fastapi-1  |   File "<frozen importlib._bootstrap>", line 1014, in _gcd_import\nmilvus-1-fastapi-1  |   File "<frozen importlib._bootstrap>", line 991, in _find_and_load\nmilvus-1-fastapi-1  |   File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked\nmilvus-1-fastapi-1  |   File "<frozen importlib._bootstrap>", line 671, in _load_unlocked\nmilvus-1-fastapi-1  |   File "<frozen importlib._bootstrap_external>", line 843, in exec_module\nmilvus-1-fastapi-1  |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed\nmilvus-1-fastapi-1  |   File "/code/./app/main.py", line 11, in <module>\nmilvus-1-fastapi-1  |     connections.connect(\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/pymilvus/orm/connections.py", line 262, in connect\nmilvus-1-fastapi-1  |     connect_milvus(**kwargs, password=password)\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/pymilvus/orm/connections.py", line 233, in connect_milvus\nmilvus-1-fastapi-1  |     gh._wait_for_channel_ready()\nmilvus-1-fastapi-1  |   File "/usr/local/lib/python3.8/site-packages/pymilvus/client/grpc_handler.py", line 118, in _wait_for_channel_ready\nmilvus-1-fastapi-1  |     raise MilvusException(Status.CONNECT_FAILED, f'Fail connecting to server on {self._address}. Timeout')\nmilvus-1-fastapi-1  | pymilvus.exceptions.MilvusException: <MilvusException: (code=2, message=Fail connecting to server on localhost:19530. Timeout)>\nmilvus-1-fastapi-1 exited with code 1\n
Run Code Online (Sandbox Code Playgroud)\n

Milvus 服务器似乎正在工作,所以这不是问题。

\n
NAME                 COMMAND                  SERVICE             STATUS              PORTS\nmilvus-1-fastapi-1   "uvicorn app.main:ap\xe2\x80\xa6"   fastapi             restarting             0.0.0.0:80->80/tcp\nmilvus-etcd          "etcd -advertise-cli\xe2\x80\xa6"   etcd                running             2379-2380/tcp\nmilvus-minio         "/usr/bin/docker-ent\xe2\x80\xa6"   minio               running (healthy)   9000/tcp\nmilvus-standalone    "/tini -- milvus run\xe2\x80\xa6"   standalone          running             0.0.0.0:9091->9091/tcp, 0.0.0.0:19530->19530/tcp\n
Run Code Online (Sandbox Code Playgroud)\n

如果这很重要的话,我会在 Mac 上运行 Docker。我尝试使用 gitpod.io 但错误仍然存​​在。

\n

小智 1

使用 pymilvus==2.2.0 有效

from pymilvus import (connections, utility, FieldSchema, CollectionSchema, DataType, Collection,)connections.connect("default", host="localhost", port="19530")

print("已连接...")