Symfony缓存适配器无法保存密钥:Docker容器权限异常求助
解决Docker中Symfony缓存权限被root占用的问题
1. 调整php-fpm运行配置,强制子进程用www-data
php-fpm主进程默认以root启动,但子进程可指定运行用户。修改php-fpm的www.conf配置,确保所有子进程及监听socket的权限归属正确:
在Dockerfile中添加以下命令:
# 修改php-fpm运行用户和组 RUN sed -i 's/user = www-data/user = www-data/g' /usr/local/etc/php-fpm.d/www.conf RUN sed -i 's/group = www-data/group = www-data/g' /usr/local/etc/php-fpm.d/www.conf # 修正监听socket的权限 RUN sed -i 's/listen.owner = www-data/listen.owner = www-data/g' /usr/local/etc/php-fpm.d/www.conf RUN sed -i 's/listen.group = www-data/listen.group = www-data/g' /usr/local/etc/php-fpm.d/www.conf
2. 以www-data用户启动php-fpm进程
避免root用户运行php-fpm主进程,从根源杜绝权限混乱:
- 在Dockerfile末尾添加:
USER www-data - 或在docker-compose.yml中指定运行用户:
services: php-fpm: # 其他配置项 user: www-data
3. 启动时修复缓存目录权限并设置粘性位
给var目录设置g+s粘性位,确保后续生成的文件自动继承目录的组权限:
在docker-compose.yml的command中添加初始化命令:
services: php-fpm: command: > sh -c "chown -R www-data:www-data /var/www/symfony/var && chmod -R g+s /var/www/symfony/var && php-fpm"
4. 检查Symfony缓存配置
确认config/packages/cache.yaml中文件缓存适配器未配置错误权限:
framework: cache: app: cache.adapter.filesystem pools: cache.app: adapter: cache.adapter.filesystem directory: '%kernel.cache_dir%/pools' # 确保此处无强制root权限的配置项
内容的提问来源于stack exchange,提问作者Martin Tovmassian
相关产品推荐
相关产品推荐

