Redis
 sql >> база данни >  >> NoSQL >> Redis

Docker Redis Connection отказа

Вашият проблем

Docker Compose създава отделен контейнер за докер за различни услуги. Всеки контейнер е, логично казано, като различни отделни компютърни сървъри, които се свързват един с друг само чрез докер мрежа.

Разгледайте всяко поле в тази диаграма като отделен компютър, тогава на практика имате това:

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

Вашият PHP контейнер не вижда redis в "localhost", защото в него няма redis. Точно както няма да види MySQL в "localhost". Вашият redis работи в контейнера "redis". Вашият MySQL работи във вашия "db" контейнер.

Нещата, които ви объркват, са директивите за свързване на портове (т.е. ports в това определение):

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

Портът 6379 на контейнера "redis" е свързан към вашия компютър, но САМО към вашия компютър . Друг контейнер няма същия достъп до връзките на портовете. Така че дори вашият компютър може да го свърже с '127.0.0.1:6379', php контейнерът не може да направи същото.

Решение

Както е описано в Работа в мрежа в Docker Compose, всеки контейнер за docker compose може да има достъп до друг контейнер, като използва името на услугата като име на хост. Например, вашето програмиране се изпълнява от услуга php има достъп до вашата MySQL услуга с името на хоста db .

Така че трябва да свържете redis с неговото име на хост redis

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да възстановим Redis данни от моментна снимка (rdb файл), копирана от друга машина?

  2. Може ли redis да замени напълно mysql?

  3. Това валидно използване на ServiceStack Redis ли е?

  4. Не можа да се свърже с Redis на 127.0.0.1:6379:Връзката е отказана

  5. Redis срещу RabbitMQ като посредник на данни/система за съобщения между Logstash и elasticsearch