Не удается подключиться к «redis-серверу», работающему в wsl2, с помощью пакета «ioredis» из-за ошибки ECONNREFUSED

#node.js #redis #wsl-2 #ioredis

Вопрос:

Я запускаю свою redis-server сборку redis в своем дистрибутиве Ubuntu wsl2. Но, к сожалению, я не могу подключиться к нему с помощью ioredis пакета. Вот мой код (это тот же код, который ioredis был предоставлен):-

 const Redis = require("ioredis");
const redis = new Redis({
  port: 6379,
  host: '127.0.0.1'
});

redis.set("foo", "bar");

redis.get("foo", function (err, result) {
  if (err) {
    console.error(err);
  } else {
    console.log(result); // Promise resolves to "bar"
  }
});
 

Каждый раз, когда я получаю следующую ошибку

 [ioredis] Unhandled error event: Error: connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1146:16)
 

Я могу подключиться к redis-server использованию redis-client с моего терминала wsl2, но не с помощью моего кода. Я не изменил конфигурацию Redis по умолчанию, поэтому я не уверен, откуда это взялось. Любая зацепка была бы действительно полезна. Спасибо.

Ответ №1:

После нескольких часов опробования различных решений я смог устранить проблему. Поскольку redis-server на wsl2 работал в отдельной сети, доступ к нему через 127.0.0.1 не работал. Мне нужно было знать IP-адрес моего экземпляра wsl2 и передать правильные сведения о подключении в конструктор ioredis.

  1. Введите sudo apt install net-tools свой терминал wsl2
  2. Введите ifconfig , чтобы получить IP-адрес. Это должно быть в eth0 inet разделе.
  3. Скопируйте и вставьте IP-адрес при создании экземпляра ioredis
 const redis = new Redis({
 port: 6379,
 host: '<your-wsl2-ip-here>'
});
 
  1. Введите redis-cli , а затем выключите защищенный режим с помощью CONFIG SET protected-mode no .

Надеюсь, это помогло.

Ответ №2:

Другим способом решения вышеуказанной проблемы может быть загрузка конфигурационного файла по умолчанию redis.conf , расположенного на один уровень выше redis-server исполняемого файла, который имеет необходимую конфигурацию, чтобы разрешить внешний трафик в процесс wsl2.

 ./redis-server ../redis.conf