如何从外部.net应用程序连接多节点Couchbase docker容器?

问题描述 投票:0回答:1

我有一个 .NET API 应用程序和 Couchbase 数据库。 Couchbase 数据库作为 Docker 容器运行,并具有一台主机多节点配置。我的 dotnet 应用程序位于 docker 环境和 Couchbase Docker 容器的外部客户端之外。 Docker-compose 配置如下,我可以使用 URL http://localhost:8091 和 http://localhost:8094 访问 Couchbase 的 Web 控制台。我尝试使用连接字符串 couchbase://localhost、couchbase://localhost:8091、localhost:8094、couchbase://172.20.0.2,172.20.0.3、couchbase://172.20.0.2:8094 从 .net 应用程序进行连接,172.20.0.3:8091,couchbase://192.168.65.0(Docker主机默认IP地址)等但无法连接。但是当我将 Couchbase 配置为单个主机上的单个节点时,我可以从 .net 应用程序进行连接。看起来好像缺少一些网络配置,我发布了如下所述的端口,但没有任何改变。任何帮助我的人,我将不胜感激。

   version: "3.0"
services:
 
   couchbase-node1:
   image: couchbase/server:community-7.6.1
   container_name: couchbase-node1-container
   ports:
     - "8091:8091"  # Couchbase Web Console
     - "8092:8092"  # Couchbase Query Service
     - "8093:8093"  # Couchbase Index Service
     - "11210:11210"  # Couchbase Data Service
   environment:
     - CLUSTER_INIT_USERNAME=Administrator
     - CLUSTER_INIT_PASSWORD=couchbase2024*
     - SERVICES=data,index,query,fts
     - USERNAME=Administrator # Couchbase Server Default Username, custom usernames is not accepted!
     - PASSWORD=couchbase2024*
   networks:
     couchbase-net:
       ipv4_address: 172.20.0.3
       aliases:
        - couchbase-node1
   volumes:
     - node1_data:/opt/couchbase/var
 couchbase-node2:
   image: couchbase/server:community-7.6.1
   container_name: couchbase-node2-container 
   ports:
     - "8094:8091"  # Couchbase Web Console
     - "8095:8092"  # Couchbase Query Service
     - "8096:8093"  # Couchbase Index Service
     - "11211:11210"  # Couchbase Data Service
   environment:
     - CLUSTER_JOIN=couchbase-node1
     - USERNAME=Administrator
     - PASSWORD=couchbase2024*
   networks:
     couchbase-net:
       ipv4_address: 172.20.0.2
       aliases:
         - couchbase-node2
   volumes:
     - node2_data:/opt/couchbase/var
   depends_on:
     - couchbase-node1
volumes:
 local_pgdata:
 pgadmin-data:
 es-data:
 node1_data:
 node2_data:
networks:
 es-net:
   driver: bridge
 couchbase-net:
   driver: bridge
   ipam:
     driver: default
     config:
       - subnet: 172.20.0.0/24
.net docker networking containers couchbase
1个回答
0
投票

这里有几个潜在的问题。首先,您使用 8094-8096 作为外部端口,这可能不是问题(见下文),但 8091-8097 的所有端口都用于 Couchbase 网络流量,因此通过重新分配它们,您可能会阻止或至少让客户感到困惑。

但是,根据经验,我认为主要问题是:

我的 dotnet 应用程序位于 docker 环境和 Couchbase Docker 容器的外部客户端之外

Couchbase 客户端需要访问 Couchbase 的每个节点。据我所知,您无法在 Docker 主机内运行多个节点并访问所有这些节点,因为您只能为 Docker 内的单个节点公开给定端口。 (例如,您可以将节点 A 的端口 8091 公开到 Docker 主机外部,但节点 B 和 C 不能通过同一端口公开)。

假设您这样做是为了本地开发,我的建议如下:

  • 如果您必须在 Docker 内运行多个节点,也请在 Docker 内运行您的 .NET 应用程序。
  • 如果必须在 Docker 外部运行 .NET 应用程序,请在 Docker 内部运行 Couchbase 的单个节点。

对于 Docker/网络忍者(那个人不是我)来说可能还有另一种解决方案,但我还没有看到。

© www.soinside.com 2019 - 2024. All rights reserved.