如何解决AerospikeClient错误代码1

时间:2019-06-17 11:54:07

标签: c# docker .net-core containers aerospike

创建AerospikeClient后,我收到:

Aerospike.Client.AerospikeException.Connection
  HResult=0x80131500
  Message=Failed to connect to host(s): 
localhost 3000 Error -1: An established connection was aborted by the software in your host machine

我使用以下命令创建了一个新的Aerospike容器,该容器在端口3000的本地计算机上运行:

docker run -d -p 3000:3000 aerospike/aerospike-server

并且我已经通过以下命令设法将其与AerospikeClient和AQL连接起来:

docker run -it aerospike/aerospike-tools aql -h 172.17.0.2 -p 3000

后来我玩了docker容器命令(停止和启动),它仍然有效。

现在由于某种原因它不再起作用,我仍然设法连接AQL,但不能连接AerospikeClient。

asClient = new AerospikeClient(HostName, Port); //throws Exception

这是完整的异常日志:

Source=AerospikeClient
  StackTrace:
   at Aerospike.Client.Cluster.SeedNodes(Boolean failIfNotConnected)
   at Aerospike.Client.Cluster.Tend(Boolean failIfNotConnected)
   at Aerospike.Client.Cluster.WaitTillStabilized(Boolean failIfNotConnected)
   at Aerospike.Client.Cluster.InitTendThread(Boolean failIfNotConnected)
   at RestaurantDecider.DataAccess.AerospikeRestaurantRepo..ctor() in C:\Users\etianc\source\repos\AeroSpikeDemo\RestaurantDecider.DataAccess\AerospikeRestaurantRepo.cs:line 28
   at AeroSpikeDemo.Program.Main(String[] args) in C:\Users\etianc\source\repos\AeroSpikeDemo\AeroSpikeDemo\Program.cs:line 30

1 个答案:

答案 0 :(得分:3)

我对Aerospike不太熟悉,但是从我看来,您正在运行两个单独的容器-一个是“服务器”,另一个是连接到它的客户端。在不使用docker-compose.yml的情况下执行此操作时需要考虑的事情

  1. 两个容器都必须位于同一网络上才能相互通信(建议您使用docker-compose进行多服务设置,因为它会为项目创建一个特殊的网络,默认情况下所有容器都已连接到该网络)
  2. 您不应该只是硬编码IP地址,而是定义一个特殊的主机名,因为IP地址可以根据已分配给其他网络/容器的IP进行更改

如果我是你,我只会使用类似于以下内容的docker-compose.yml文件:

version: "3"
services:
  server:
    image: aerospike/aerospike-server
  client:
    depends_on:
      - server
    image: aerospike/aerospike-tools
    command: ["aql", "-h", "172.17.0.2", "-p", "3000"]

但是根据我在docker hub上看到的内容,您应该使用自定义配置文件并定义访问地址(请参见访问地址配置下的https://hub.docker.com/_/aerospike