sql >> Database >  >> NoSQL >> Redis

Docker Redis-verbinding geweigerd

Uw probleem

Docker Compose maakt een afzonderlijke docker-container voor verschillende services. Elke container is, logisch gezien, als verschillende afzonderlijke computerservers die alleen met elkaar zijn verbonden via een docker-netwerk.

Beschouw elk vakje in dit diagram als een individuele computer, dan is dit praktisch wat je hebt:

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

Uw PHP-container ziet geen redis in "localhost" omdat er geen redis in zit. Net zoals het geen MySQL zou zien in "localhost". Uw redis wordt uitgevoerd in de "redis"-container. Uw MySQL wordt uitgevoerd in uw "db"-container.

De dingen die u in verwarring brengen, zijn de bindende richtlijnen voor poorten (d.w.z. ports in deze definitie):

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

De poort 6379 van de "redis"-container is gebonden aan uw computer, maar ALLEEN aan uw computer . Andere containers hebben niet dezelfde toegang tot de poortbindingen. Dus zelfs je computer kan hem verbinden met '127.0.0.1:6379', de php container kan niet hetzelfde.

Oplossing

Zoals beschreven in Netwerken in Docker Compose, heeft elke docker compose-container toegang tot een andere container door de servicenaam als hostnaam te gebruiken. Uw programmering wordt bijvoorbeeld uitgevoerd door service php heeft toegang tot uw MySQL-service met de hostnaam db .

Dus je moet redis verbinden met zijn hostnaam redis

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


  1. Een overzicht van MongoDB en taakverdeling

  2. Hoe kan ik sorteren dat nulls als laatste in mongodb worden besteld?

  3. Alleen de waarde teruggeven in MongoDB?

  4. Hoe het gebrek aan transacties in MongoDB te omzeilen?