Я не могу подключиться (тайм-аут) к докеризованному серверу 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 Я думаю, что это уже объяснено в ответе, но все же я отредактировал, чтобы включить больше деталей.
В частности, я пробовал оба rdcli -h host.docker.internal в терминале Mac.
host.docker.internal
— это DNS-имя для доступа к хосту докера из контейнера. Плохая практика использовать это внутри одного контейнера для общения с другим контейнером. Вместо этого вы должны создать сеть, создать оба контейнера в этой сети и использовать имя контейнера для подключения. Когда это будет сделано, порт даже не нужно публиковать.
С хоста вы подключаетесь к опубликованному порту. Поскольку контейнер развернут с помощью -p 6379:6379
, вы должны иметь доступ к этому порту с имени хоста вашего хоста или с локального хоста на этом хосте:
rdcli -h localhost
какая команда дает вам ошибку или тайм-аут? Можете ли вы привести полный пример. Кроме того, откуда вы запускаете эту команду (контейнер или ноутбук)?