Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Koneksi Docker Redis ditolak

Masalah Anda

Docker Compose membuat wadah buruh pelabuhan terpisah untuk layanan yang berbeda. Setiap kontainer, secara logis, seperti server komputer terpisah yang berbeda yang hanya terhubung satu sama lain melalui jaringan buruh pelabuhan.

Pertimbangkan setiap kotak dalam diagram ini sebagai komputer individual, maka ini yang Anda miliki:

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

Wadah PHP Anda tidak melihat redis apa pun di "localhost" karena tidak ada redis di dalamnya. Sama seperti itu tidak akan melihat MySQL di "localhost". Redis Anda berjalan di wadah "redis". MySQL Anda berjalan di wadah "db" Anda.

Hal-hal yang membingungkan Anda adalah arahan pengikatan port (yaitu ports dalam definisi ini):

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

Port 6379 penampung "redis" diikat ke komputer Anda, tetapi HANYA ke komputer Anda . Kontainer lain tidak memiliki akses yang sama ke binding port. Jadi, bahkan komputer Anda dapat menghubungkannya dengan '127.0.0.1:6379', php wadah tidak dapat melakukan hal yang sama.

Solusi

Seperti yang dijelaskan di Networking in Docker Compose, setiap wadah penulisan buruh pelabuhan dapat mengakses wadah lain dengan menggunakan nama layanan sebagai nama host. Misalnya, pemrograman Anda berjalan dengan layanan php dapat mengakses layanan MySQL Anda dengan nama host db .

Jadi Anda harus menghubungkan redis dengan hostname 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 cluster reshard [ERR] Memanggil MIGRATE:ERR Syntax error

  2. Bagaimana melakukan MENONTON dasar dengan StackExchange.Redis

  3. Redis:Urutkan dan dapatkan n Kunci Tetangga

  4. Bagaimana cara memberi tahu Klien di mana master Redis baru menggunakan Sentinel

  5. Websocket Terputus Sambungkan Panggilan Gagal