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

Docker Redis Connection nægtede

Dit problem

Docker Compose opretter adskilt docker-container til forskellige tjenester. Hver container er, logisk set, som forskellige adskilte computerservere, der kun er forbundet med hinanden gennem docker-netværk.

Betragt hver boks i dette diagram som en individuel computer, så er dette praktisk talt, hvad du har:

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

Din PHP-container kan ikke se nogen redis i "localhost", fordi der ikke er nogen redis i den. Ligesom den ikke ville se nogen MySQL i "localhost". Din redis kører i "redis"-beholderen. Din MySQL kører i din "db"-beholder.

De ting, der forvirrer dig, er de portbindingsdirektiver (dvs. ports i denne definition):

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

Porten 6379 af "redis"-beholderen er bundet til din computer, men KUN til din computer . Andre containere har ikke den samme adgang til havnebindingerne. Så selv din computer kan forbinde den med '127.0.0.1:6379', php container kan ikke gøre det samme.

Løsning

Som beskrevet i Netværk i Docker Compose kan hver docker compose-container få adgang til en anden container ved at bruge tjenestenavnet som værtsnavn. For eksempel, din programmering kører af tjenesten php kan få adgang til din MySQL-tjeneste med værtsnavnet db .

Så du bør forbinde redis med dets værtsnavn redis

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


  1. Sådan bygger du docker-billede fra github-lageret

  2. $unset er tom. Du skal angive et felt som sådan:{$unset:{<field>:...}}

  3. skubbe objekt ind i array-skema i Mongoose

  4. Tæl array-elementer, der matcher betingelsen