Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Docker Redis Connection đã từ chối

Vấn đề của bạn

Docker Compose tạo vùng chứa docker riêng biệt cho các dịch vụ khác nhau. Nói một cách logic, mỗi vùng chứa giống như các máy chủ máy tính riêng biệt khác nhau chỉ được kết nối với nhau thông qua mạng docker.

Hãy coi mỗi hộp trong sơ đồ này như một máy tính riêng lẻ, thì đây thực tế là những gì bạn có:

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

Vùng chứa PHP của bạn không thấy bất kỳ dấu đỏ nào trong "localhost" vì không có dấu đỏ nào trong đó. Giống như nó sẽ không thấy bất kỳ MySQL nào trong "localhost". Redis của bạn đang chạy trong vùng chứa "redis". MySQL của bạn đang chạy trong vùng chứa "db" của bạn.

Điều khiến bạn bối rối là các chỉ thị liên kết cổng (tức là ports trong định nghĩa này):

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

Cổng 6379 của vùng chứa "redis" được liên kết với máy tính của bạn, nhưng CHỈ với máy tính của bạn . Vùng chứa khác không có cùng quyền truy cập vào các ràng buộc cổng. Vì vậy, ngay cả máy tính của bạn cũng có thể kết nối nó với '127.0.0.1:6379', php vùng chứa không thể làm như vậy.

Giải pháp

Như được mô tả trong Mạng trong Docker Compose, mỗi vùng chứa soạn thư của docker có thể truy cập vùng chứa khác bằng cách sử dụng tên dịch vụ làm tên máy chủ. Ví dụ:chương trình của bạn chạy bằng dịch vụ php có thể truy cập dịch vụ MySQL của bạn bằng tên máy chủ db .

Vì vậy, bạn nên kết nối redis với tên máy chủ của nó là 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. Kiểm tra xem một giá trị tồn tại trong danh sách đã được Redis chưa

  2. Thư viện Redis Rentis có tạo chuỗi riêng cho các lệnh gọi lại không đồng bộ không

  3. Bộ lưu trữ Kubernetes NFS sử dụng PV và PVC

  4. Chạy Redis trên Travis CI

  5. Làm cách nào để nhận các giá trị từ Redis bằng cách sử dụng các khóa có chứa khoảng trắng?