Redis
 sql >> Base de données >  >> NoSQL >> Redis

Connexion Docker Redis refusée

Votre problème

Docker Compose crée un conteneur Docker séparé pour différents services. Chaque conteneur est, logiquement parlant, comme différents serveurs informatiques séparés qui ne se connectaient les uns aux autres que via le réseau docker.

Considérez chaque case de ce diagramme comme un ordinateur individuel, alors c'est pratiquement ce que vous avez :

+----------------------------------------------------------+
|                       your machine                       |
+----------------------------------------------------------+
                               |                    
        +------ (virtual network by docker) -------+
        |                      |                   |
+-----------------+ +-------------------+ +----------------+
| "php" container | | "redis" container | | "db" container |
+-----------------+ +-------------------+ +----------------+

Votre conteneur PHP ne voit aucun redis dans "localhost" car il n'y a pas de redis dedans. Tout comme il ne verrait aucun MySQL dans "localhost". Votre redis s'exécute dans le conteneur "redis". Votre MySQL s'exécute dans votre conteneur "db".

Ce qui vous déroute, ce sont les directives de liaison de port (c'est-à-dire ports dans cette définition):

redis:
  build:
    context: .
    dockerfile: Dockerfile_redis
  ports:
    - "6379:6379"

Le port 6379 du conteneur "redis" est lié à votre ordinateur, mais à votre ordinateur UNIQUEMENT . L'autre conteneur n'a pas le même accès aux liaisons de port. Ainsi, même votre ordinateur peut le connecter avec '127.0.0.1:6379', le php le conteneur ne peut pas faire la même chose.

Solution

Comme décrit dans Mise en réseau dans Docker Compose, chaque conteneur Docker Compose peut accéder à un autre conteneur en utilisant le nom du service comme nom d'hôte. Par exemple, votre programmation exécutée par le service php peut accéder à votre service MySQL avec le nom d'hôte db .

Vous devez donc vous connecter à redis avec son nom d'hôte redis

$redis = new \Redis();
try {
    $redis->connect('redis', 6379);
} catch (\Exception $e) {
    var_dump($e->getMessage())  ;
    die;
}