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;
}