Подключение к Redis, запущенному в контейнере Docker, с хост-машины

Я вижу, что многие люди борются с этим, как будто, возможно, есть ошибка в изображении контейнера redis, и другие, похоже, преследуют аналогичную проблему.

Я использую стандартное изображение redis на DockerHub. (https://github.com/dockerfile/redis)

работает это так:

docker run -it -p 6379:6379 redis bash

как только я войду, я могу запустить сервер и сделать Redis ping из образа контейнера.

к сожалению, я не могу подключиться к redis контейнер от моего хозяина.

Я попытался установить, например, ниже.

bind 127.0.0.1

и удалил привязку из конфигурации

и попытался отключить защищенный режим

protected-mode no

Я знаю, что он читает файл конфигурации, так как я изменил порты только для тестирования, и я смог это сделать.

я запускаю Windows 10, так что, возможно, это проблема с сетью windows. У меня никогда не было проблем с Докером. Я озадачен

3 ответов


проблема с вашей привязкой, вы должны установить следующее:

bind 0.0.0.0

это redis для привязки ко всем доступным интерфейсам в контейнерной среде с одним интерфейсом (eth0) и петлевой (lo) redis будет привязываться к обоим вышеперечисленным. Вы должны рассмотреть возможность добавления мер безопасности через другие директивы в config file или с помощью внешних инструментов, таких как firewalls. ведь при таком подходе каждый может подключиться к вашему redis сервер.

значение по умолчанию bind 127.0.0.1 и эта настройка вызовет redis только слушать на интерфейсе loopback, и он будет доступен только изнутри контейнера. (для безопасности)

для запуска redis с пользовательским файлом конфигурации:

sudo docker run -d --name redis-test -p 6379:6379  -v /path/to/redisconf/redis.conf:/redis.conf redis redis-server /redis.conf

теперь, чтобы проверить на хосте docker с redis-tools установлено:

sudo redis-cli                           
127.0.0.1:6379> 
127.0.0.1:6379> set farhad likes:stackoverflow
OK
127.0.0.1:6379> get farhad
"likes:stackoverflow"
127.0.0.1:6379> 

вы также можете подключиться к вашему redis контейнер от внешнего хоста через:

redis-cli -h 'IP-address-of-dockerhost-running-redis-container'

вот некоторые инструкции, чтобы сделать эту работу правильно.

установить официальный Докер не дистрибутив РЕПО.

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
systemctl enable docker ; systemctl start docker; systemctl status docker

смотрите установить с помощью сценария удобства

подключение к контейнеру Redis с хоста

mkdir -p /etc/redis/
chown -R 1000:1000 /etc/redis
sudo docker run -d --name redis -p 6379:6379 --restart unless-stopped -v /etc/redis/:/data redis redis-server /data

Примечание: важной частью, которая является ключом к вашему решению, является предоставление порта (- p 6379:6379) хосту docker и маршрут к контейнерному порту. См.Документация Redis Docker

установите "redis-tools" на хост docker. Centos устанавливает redis через выпуск epel.


Теперь это может быть проще с версией 4.0.9 (Docker Toolbox on Win10). Просто соединитесь с клиентом redis, затем:

set bind 0.0.0.0
save

новая настройка прилипает после остановки / запуска.