我的网站基于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' => '/',
卷路径框架/会话没有帮助
答案 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
的更多信息