web-dev-qa-db-fra.com

Connexion Redis Docker refusée

Je viens de construire l'instance de docker redis

$ docker pull redis

Après quoi je l'ai couru comme ça.

$ docker run --name=redis --detach=true --publish=6379:6379 redis

Je reçois ce qui suit

$ docker ps 
key        redis   "/sbin/entrypoint.sh"    22 minutes ago      Up 22 minutes       0.0.0.0:6379->6379/tcp   redis

Pour moi, ce qui précède signifie qu'il exécute maintenant l'écoute sur le port 6379 sur localhost ou 127.0.0.1 ou 0.0.0.0.

Mais à ma grande surprise, lorsque j'essaie de me connecter, je réponds avec une connexion refusée.

S'il vous plaît quelqu'un peut-il jeter un peu de lumière.

14
Ikenna Okpala

Vous devez fournir plus d'informations sur votre environnement (OS, installation Docker, etc.), mais en gros, si vous démarrez votre conteneur Redis comme ceci:

docker run --name=redis-devel --publish=6379:6379 --hostname=redis --restart=on-failure --detach redis:latest

Il devrait exposer le port quoi qu'il arrive. La seule raison pour laquelle vous ne pourrez peut-être pas vous y connecter, c'est si vous avez foiré votre interface de pont, si vous êtes sous Linux, ou si vous utilisez un docker avec sa propre interface réseau et sa propre adresse IP et que vous ' ne se connecte pas à cette adresse IP. Si vous utilisez Docker pour Mac, cela ne prend en charge que le routage vers l'adresse de l'hôte local, car le pontage sur les hôtes Mac ne fonctionne pas encore.

Quoi qu'il en soit, sur MacOS avec Docker pour Mac (pas l'ancienne Docker Toolbox), les éléments suivants devraient être suffisants pour commencer:

➜  ~ docker run --name=redis-devel --publish=6379:6379 --hostname=redis --restart=on-failure --detach redis:latest
6bfc6250cc505f82b56a405c44791f193ec5b53469f1625b289ef8a5d7d3b61e
➜  ~ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
6bfc6250cc50        redis:latest        "docker-entrypoint.s…"   10 minutes ago      Up 10 minutes       0.0.0.0:6379->6379/tcp   redis-devel
➜  ~ redis-cli ping
PONG
➜  ~ 
8

Trouvez le port découvert du redis et utilisez-le pour vous connecter

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-server
1
Rajesh Guptan

Je vous recommande d'utiliser docker-compose https://docs.docker.com/compose/

en vous docker-compose.yml

redis:                                                                          
  image: redis
ports:
  - "6379:6379" 

Après cela, vous pouvez exécuter:

$ docker-compose run redis /bin/bash
$ redis-server
$ redis-cli ping

Devrait revenir: PONG

1
thiagovsk

Il ressemble à un problème de mise en réseau provoqué par le client redis, car votre serveur redis semble bien.

N'oubliez pas que la page redis docker est un peu déroutante. Il dit que pour vous connecter à votre redis via redis-cli, vous devez taper:

docker run -it --network some-network --rm redis redis-cli -h some-redis

Cela crée cependant un autre conteneur docker qui est essentiellement le client redis. Il ne peut pas se connecter à votre serveur redis car ils ne sont pas connectés au même réseau.

Vous pouvez faire quelque chose d'un peu différent comme suit:

docker network create some-network
docker run --name redis-server --network some-network -d redis
docker run -it --network some-network --rm redis redis-cli -h redis-server

L'autre option est en effet de mapper le port 6379 comme vous l'avez fait, mais il vous faudra utiliser un client redis qui devra être téléchargé sur votre propre ordinateur.

1
Idan P

Si vous utilisez exemple de configuration Redis comme point de départ (comme je l'étais lorsque j'ai rencontré ce problème), la combinaison de bind 127.0.0.1 directive et protected-mode yes ne permettait pas la communication entre les conteneurs Docker. Pour mes besoins, j'ai commenté la directive bind et défini le protected-mode directive à no - mais tenez compte des avertissements fournis concernant la non-exposition de Redis à Internet ouvert.

0
Marlorn