web-dev-qa-db-fra.com

Connexion à Redis s'exécutant dans le conteneur Docker à partir de la machine hôte

Je vois beaucoup de gens qui luttent avec cela, j'ai l'impression qu'il y a peut-être un bug dans l'image de Redis Container, et que d'autres semblent s'attaquer à un problème similaire.

J'utilise l'image redis standard sur DockerHub. ( https://github.com/dockerfile/redis )

ça marche comme ça:

docker run -it -p 6379:6379 redis bash

Une fois que je suis entré, je peux démarrer le serveur et effectuer un ping redis à partir de l'image du conteneur.

Malheureusement, je ne peux pas me connecter au conteneur redis à partir de mon hôte.

J'ai essayé de mettre en place, comme ci-dessous. 

bind 127.0.0.1

et enlevé le lien de la configuration

et essayé d'éteindre le mode protégé

protected-mode no

Je sais que c'est en train de lire le fichier de configuration, car j'ai changé de port juste pour tester, et j'ai été capable de le faire.

J'utilise Windows 10, alors c'est peut-être un problème de réseau Windows. Je n'ai jamais un problème avec docker normalement. Je suis perplexe 

17
user3888307

Le problème vient de votre liaison, vous devez définir les éléments suivants:

bind 0.0.0.0

Ceci va définir redis pour se lier à toutes les interfaces disponibles, dans un environnement conteneurisé avec une interface (eth0) et une boucle (lo). Redis va lier les deux éléments ci-dessus. Vous devriez envisager d'ajouter des mesures de sécurité via d'autres directives dans config file ou d'utiliser des outils externes tels que firewalls. car avec cette approche, tout le monde peut se connecter à votre serveur redis.

Le paramètre par défaut est bind 127.0.0.1 et ce paramètre fera que redis n'écoutera que sur l'interface de bouclage et qu'il ne sera accessible que depuis l'intérieur du conteneur. (pour la sécurité)

Pour exécuter redis avec un fichier de configuration personnalisé:

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

Maintenant, pour vérifier sur l'hôte de docker avec redis-tools installé:

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> 

Vous pouvez également vous connecter à votre conteneur redis à partir d'un hôte externe via:

redis-cli -h 'IP-address-of-dockerhost-running-redis-container'
17
Farhad Farahi

Voici quelques instructions pour que cela fonctionne correctement.

Installez le repo officiel de Docker et non de Distro.

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

Reportez-vous à Installation à l'aide du script pratique

Se connecter au conteneur Redis à partir de l'hôte

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

REMARQUE: L'important dans votre solution consiste à exposer le port (-p 6379: 6379) à votre hôte docker et à l'acheminer au port du conteneur . Reportez-vous à la section Documentation Redis Docker

Installez "redis-tools" dans votre hôte de menu fixe. Centos installe redis via la version epel.

1
Randy Lerma

Cela pourrait être plus facile maintenant avec la version 4.0.9 (Docker Toolbox on Win10). Connectez-vous simplement avec un client Redis, puis:

set bind 0.0.0.0
save

Le nouveau réglage s'en tient après l'arrêt/le démarrage. 

0
Darek