Как решить AerospikeClient Код ошибки 1 - PullRequest
1 голос
/ 17 июня 2019

После создания 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 Ответ

3 голосов
/ 17 июня 2019

Я не слишком знаком с 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"]

Но из того, что я вижу на док-концентраторе, вы должны использовать пользовательский файл конфигурации и определить адрес доступа (см. https://hub.docker.com/_/aerospike в разделе Конфигурация адреса доступа )

...