Подключение к 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
новая настройка прилипает после остановки / запуска.