Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Odmowa połączenia Docker Redis

Twój problem

Docker Compose tworzy oddzielny kontener dockera dla różnych usług. Każdy kontener jest, logicznie rzecz biorąc, jak różne oddzielne serwery komputerowe, które łączą się ze sobą tylko przez sieć dokerów.

Rozważ każde pole na tym schemacie jako indywidualny komputer, wtedy praktycznie to masz:

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

Twój kontener PHP nie widzi żadnego redis w "localhost", ponieważ nie ma w nim redis. Tak jak nie widziałby żadnego MySQL w "localhost". Twoje redis działa w kontenerze „redis”. Twój MySQL działa w Twoim kontenerze "db".

Rzeczy, które Cię dezorientują, to dyrektywy wiążące porty (np. ports w tej definicji):

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

Port 6379 kontenera „redis” jest powiązany z Twoim komputerem, ale TYLKO z Twoim komputerem . Inny kontener nie ma takiego samego dostępu do powiązań portów. Więc nawet twój komputer może połączyć się z „127.0.0.1:6379”, php kontener nie może zrobić tego samego.

Rozwiązanie

Jak opisano w sieci w Docker Compose, każdy kontener Docker Compose może uzyskać dostęp do innego kontenera przy użyciu nazwy usługi jako nazwy hosta. Na przykład, twoje programowanie uruchomione przez usługę php może uzyskać dostęp do Twojej usługi MySQL pod nazwą hosta db .

Powinieneś więc połączyć redis z nazwą hosta 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. Piszesz zapytanie, aby dodać wiele wartości do klucza w skrótach REDIS?

  2. Łączenie ze zdalnym serwerem redis

  3. Express Node.JS — Odbieranie wywołania zwrotnego Redis, wykonywanie obietnic

  4. Jak serializować mapę w Javie do przechowywania w Redis?

  5. Docker [Errno 111] Połączenie nie powiodło się ('127.0.0.1', 6379)