Как подключиться к докеризованному серверу Redis?

Я не могу подключиться (тайм-аут) к докеризованному серверу Redis1, который был запущен с помощью команды:

docker run -it --rm -p 6379:6379 redis:alpine

Пробовал запустить сервер с конфигами:

set bind to 0.0.0.0
protected-mode no

Однако я могу подключиться к моему серверу Redis с помощью другого контейнера докеров с помощью следующей команды:

docker run -it --rm redis:alpine redis-cli -h host.docker.internal -p 6379

а также пробовал настраивать те же параметры через cli.

Когда я пытаюсь подключиться, время ожидания соединения истекло, я пробовал как с внутренним ip

172.17.0.x

и с внутренним доменным именем:

host.docker.internal

но безрезультатно. Также обратите внимание, что я смог подключиться к серверу Redis при установке с

brew install redis

на хосте.

Что мне не хватает, как я могу решить проблему, чтобы я мог подключиться к серверу redis, который находится в контейнере докера, с хоста контейнера?


Детали среды
OS: MacOS Monterey Version: 12.6 (21G115)

Docker version 20.10.17, build 100c701

1 More specifically I've tried with both rdcli -h host.docker.internal in the mac terminal and also on application side with StackExchange.Redis.

какая команда дает вам ошибку или тайм-аут? Можете ли вы привести полный пример. Кроме того, откуда вы запускаете эту команду (контейнер или ноутбук)?

usuario 11.10.2022 09:00

@usuario Я думаю, что это уже объяснено в ответе, но все же я отредактировал, чтобы включить больше деталей.

Nae 11.10.2022 12:15
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
2
168
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В частности, я пробовал оба rdcli -h host.docker.internal в терминале Mac.

host.docker.internal — это DNS-имя для доступа к хосту докера из контейнера. Плохая практика использовать это внутри одного контейнера для общения с другим контейнером. Вместо этого вы должны создать сеть, создать оба контейнера в этой сети и использовать имя контейнера для подключения. Когда это будет сделано, порт даже не нужно публиковать.

С хоста вы подключаетесь к опубликованному порту. Поскольку контейнер развернут с помощью -p 6379:6379, вы должны иметь доступ к этому порту с имени хоста вашего хоста или с локального хоста на этом хосте:

rdcli -h localhost

Другие вопросы по теме