Redis
 sql >> Database >  >> NoSQL >> Redis

Connessione Docker Redis rifiutata

Il tuo problema

Docker Compose crea un contenitore Docker separato per diversi servizi. Ogni container è, logicamente parlando, come diversi server di computer separati che si connettono tra loro solo tramite una rete docker.

Considera ogni casella in questo diagramma come un singolo computer, quindi questo è praticamente quello che hai:

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

Il tuo contenitore PHP non vede alcun redis in "localhost" perché non contiene redis. Proprio come non vedrebbe alcun MySQL in "localhost". Il tuo redis è in esecuzione nel contenitore "redis". Il tuo MySQL è in esecuzione nel tuo contenitore "db".

Le cose che ti confondono sono le direttive di associazione delle porte (cioè ports in questa definizione):

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

La porta 6379 del contenitore "redis" è associato al tuo computer, ma SOLO al tuo computer . L'altro contenitore non ha lo stesso accesso ai collegamenti della porta. Quindi anche il tuo computer può collegarlo con '127.0.0.1:6379', il php container non può fare lo stesso.

Soluzione

Come descritto in Rete in Docker Compose, ogni contenitore Docker Compose può accedere ad altri contenitori usando il nome del servizio come nome host. Ad esempio, la tua programmazione eseguita dal servizio php può accedere al tuo servizio MySQL con il nome host db .

Quindi dovresti connettere redis con il suo nome host redis

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