如何在php-fpm容器中进行卷用户会话?

时间:2017-10-25 17:38:54

标签: php laravel session docker

我的网站基于docker容器内的代码,其中包含docker文件,如:

FROM php:7.1-fpm

RUN apt-get update && apt-get install -y libmcrypt-dev \
    mysql-client libmagickwand-dev --no-install-recommends \
    && pecl install imagick \
    && docker-php-ext-enable imagick \
    && docker-php-ext-install mcrypt pdo_mysql opcache gd

#ADD php.conf/opcache.ini    /etc/php/7.1/mods-available/opcache.ini
ADD build/prod/php.conf/www.conf       /usr/local/etc/php-fpm.d/
ADD build/prod/php.conf/php.ini        /usr/local/etc/php/

COPY .  /app

WORKDIR /app

RUN chmod 777 -R storage/
RUN php artisan cache:clear && php artisan key:generate
RUN nohup php artisan queue:work &

我构建CI流程只是使用代码创建新的应用容器并杀死旧的。但是在每次这​​样的"娱乐"之后,登录的用户都会被注销。我确定这是因为旧容器包含PHP会话,我想将它们添加到卷中,但是我没有找到它们。 我的php.ini:

session.save_handler = files
session.use_cookies = 1
session.cookie_path = /

我使用Laravel框架,我的sessions.php配置有:

'driver' => 'file',
'files' => storage_path('framework/sessions'),
'path' => '/',

卷路径框架/会话没有帮助

1 个答案:

答案 0 :(得分:0)

当您运行php artisan key:generate时,它会为 APP_KEY 生成新值。您可以在 .env 文件(项目根目录)中看到它的值

APP_KEY 用于加密和解密会话数据(以及其他内容),因此当您再次生成密钥时,laravel无法访问以前的会话数据。

如果您对会话文件使用泊坞窗卷,但 APP_KEY 更改,则存储/框架/会话中的会话文件将变得无用

通过登录本地网站,运行命令php artisan key:generate并刷新页面,可以轻松在本地进行测试。你将被退出。

要解决会话问题,请在每次创建容器时使用相同的 APP_KEY

您可以将密钥作为环境变量传递给docker run -e APP_KEY='<key-here>' ...,但您需要启用environment variables

注意:即使您使用不同的会话驱动程序(redis,database,memcached,...),密钥也应该保持不变。

有关Laravel's Application Key - what it is and how it works?

的更多信息

Laravel安装文档Application Key

有关laravel sessions

的更多信息