sql >> データベース >  >> NoSQL >> Redis

DockerRedis接続が拒否されました

    あなたの問題

    Docker Composeは、さまざまなサービス用に個別のDockerコンテナーを作成します。各コンテナは、論理的に言えば、Dockerネットワークを介してのみ相互に接続されている別々のコンピュータサーバーのようなものです。

    この図の各ボックスを個別のコンピューターと見なすと、これが実際に使用できるものになります。

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

    PHPコンテナには、redisがないため、「localhost」にredisは表示されません。 「localhost」にMySQLが表示されないのと同じように。 redisは「redis」コンテナで実行されています。 MySQLは「db」コンテナで実行されています。

    混乱するのは、ポートバインディングディレクティブ(つまり、ports)です。 この定義では):

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

    ポート6379 「redis」コンテナの一部はコンピュータにバインドされていますが、コンピュータにのみ 。他のコンテナは、ポートバインディングへの同じアクセス権を持っていません。したがって、コンピュータでも「127.0.0.1:6379」、phpに接続できます。 コンテナは同じことをすることはできません。

    ソリューション

    Docker Composeのネットワーキングで説明されているように、各docker composeコンテナーは、サービス名をホスト名として使用して他のコンテナーにアクセスできます。たとえば、サービスphpで実行されているプログラミング ホスト名dbでMySQLサービスにアクセスできます 。

    したがって、redisをそのホスト名redisに接続する必要があります

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


    1. MongoDbAtlasサーバーへの接続中にエラーが発生しました

    2. データベース自動化を開始する方法

    3. Cloudera Data Platformオペレーショナルデータベース(COD)入門

    4. すべてのセットをredisで取得するにはどうすればよいですか?