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.
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
➜ ~
Trouvez le port découvert du redis et utilisez-le pour vous connecter
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-server
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
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.
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.