首页 > 解决方案 > Redis 没有在 Docker 容器中保存 PHP 会话

问题描述

我一直在尝试实现 PHP 和 Redis 之间的会话处理程序。我已经配置了所有东西(根据我的知识和理解)并且没有这样的错误。但是,我仍然无法看到在 Redis 中为 PHP 代码生成了任何会话。

我的 PHP 代码:

<?php 
session_start(); 
$_SESSION['count']=(isset($_SESSION['count']))?$_SESSION['count']+1:1; 
$json['time ']= date(' Y-m-d H:i:s'); 
$json['ip ']=$_SERVER['REMOTE_ADDR']; 
$json['count '] = $_SESSION['count']; 
echo json_encode($json);

?>

PHP 和 Redis docker-compose.yml 条目如下:

php:
    image: php:7.1-fpm-alpine
    build: './.setup/php/'
    volumes:
      - ./public_html/:/var/www/html/
      - ./.setup/php/php.ini:/usr/local/etc/php/php.ini
      - ./.setup/php/docker-php-ext-redis.ini:/usr/local/etc/php/conf.d/docker-php-ext-redis.ini
    links:
      - redis:cacheserver
    networks:
      public_net:
        ipv4_address: ${PHP_IP}

redis:
    build: ./.setup/cache
    networks:
      public_net:
        ipv4_address: ${REDIS_IP}
    container_name: cacheserver

PHP 的 Dockerfile:

FROM php:7.1-fpm-alpine

RUN echo http://uk.alpinelinux.org/alpine/latest-stable/community/  >> /etc/apk/repositories \
    && apk add --no-cache shadow curl vim zlib-dev autoconf g++ make re2c \
    && pecl install -o -f redis \
    && docker-php-ext-enable redis.so \
    && pecl clear-cache

Redis 的 Dockerfile:

FROM redis:3.2-alpine

COPY conf/redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]

EXPOSE 6379

php.ini 和 docker-php-ext-redis.ini 的内容:

extension=redis.so

我试图将以下条目放入 php.ini,但是,它抛出了一个错误,截至目前我评论了它们:

#session.save_handler = redis
#session.save_path = tcp://192.168.0.24:6379

错误:

警告:session_start():找不到保存处理程序“redis”-第 2 行 /var/www/html/index.php 中的会话启动失败

Redis.conf 文件只有以下条目来接收来自任何地方的请求:

绑定 0.0.0.0

现在我不知道,有什么问题,最重要的是,我不知道他们俩将如何沟通。在我的 docker-compose.yml 文件中,我已经配置了一个固定网络并为两者配置了一个静态 IP。

请有任何建议。

标签: phpdockerredis

解决方案


推荐阅读