#.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
Надеюсь, это поможет всем, кто может на это наткнуться.