Служба .NET не может подключиться к Redis

#.net #docker #redis #network-programming

Вопрос:

Я пытаюсь получить API .NET, чтобы иметь возможность подключиться к экземпляру Redis в моей сети docker. Вот что у меня есть:

  • Контейнер Redis: запущен и запущен в пользовательской сети докеров my-network по адресу localhost:6379
  • Служба .NET: пытаюсь запустить и запустить в пользовательской сети докеров my-network

(Может быть?) Соответствующее управление версиями:

  • Abp.Повторное открытие 5.4.0
  • Обмен стеками.Redis 2.1.58

Я перепробовал все network inspect , добавляя и удаляя оба контейнера в сеть , даже с помощью специального флага строки подключения resolveDns=true в моем коде .NET. Независимо от того, что я делаю, я получаю:

 StackExchange.Redis.RedisConnectionException: It was not possible to connect to the redis server(s). UnableToConnect on localhost:6379/Interactive, Initializing/NotStarted, last: NONE, origin: BeginConnectAsync, outstanding: 0, last-read: 0s ago, last-write: 0s ago, keep-alive: 60s, state: Connecting, mgr: 10 of 10 available, last-heartbeat: never, global: 0s ago, v: 2.1.58.34321
 

Я тут схожу с ума, Редис работает в localhost:6379 сети докеров, почему бы и нет .СЕТЕВОЕ подключение?

ДА, я передал пользовательский файл redis.conf, который bind 0.0.0.0 также имеет.

Комментарии:

1. ваш экземпляр Redis не работает localhost . У него есть свой собственный IP-адрес в сети докеров.

2. да! Большое вам спасибо! Тьфу, почему в КАЖДОМ учебнике говорится localhost , даже при использовании docker? Есть ли способ указать, какой IP-адрес docker назначит или изменит это позже? (Только для проблем CI / CD и предсказуемости)

Ответ №1:

Благодаря комментарию Ханса Килиана я наконец-то смог подключиться!

Несмотря на то , что, казалось бы, бесконечные учебники Redis Docker говорят об использовании localhost:6379 , на самом деле это не тот случай, когда Redis работает в сети Docker. Чтобы найти этот IP-адрес, например , с именем контейнера redis , выполните:

 docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis
 

Затем вам нужно будет указать полученный IP-адрес с портом 6379 в качестве строки подключения.

tl;dr;

нет:

localhost:6379

но Докер назначил IP-адрес для контейнера, например.:

172.18.0.7:6379

ИЗМЕНИТЬ: Вы также можете использовать имя контейнера вместо IP-адреса, т. Е.:

redis:6379

Надеюсь, это поможет всем, кто может на это наткнуться.