php - 从 docker nginx/php-fpm 安装在本地卷(Mac)上的 Laravel 无法写入 session 文件

标签 php laravel session permissions docker

我有一个运行以下命令的 docker-compose.yml 文件(创建名为 mmm/nginx 的镜像):

web:
 image: mmm/nginx
 ports:
 - "80:80"
 volumes:
 - ./var:/var/www
 - ./etc/nginx/sites-enabled:/etc/nginx/sites-enabled/
 links:
 - php
 - db

php:
 image: rossriley/php56-fpm
 volumes:
 - ./var:/var/www
 - ./etc/php5/php-fpm.conf:/etc/php5/fpm/php-fpm.conf
 links:
 - db

db:
 image: sameersbn/mysql
 ports:
 - "3306:3306"
 volumes:
 - /var/lib/mysql
 environment:
 - DB_NAME=tables
 - DB_USER=table
 - DB_PASS=pass

它很好地为存储在 /var/www 中的网站提供服务

当它尝试写入日志并尝试写入 session 文件时会发生此问题。虽然它会创建文件,但它不能写入它们。

storage 的文件夹及其嵌套目录的权限设置为 777 .

为了让 laravel 写信给他们,我必须 $ chmod 777 <.log|sessionfile>它工作得很好。显然,这不是开发方式,因为我需要定期开始新 session 并每天创建新日志。

如何授予 Laravel 和 Docker 容器写入它们创建的文件的权限?

更新: 这是 laravel 的日志所说的:

local.ERROR: exception 'ErrorException' with message 'file_put_contents(/var/www/com.mtrinteractive.sandbox.form/storage/framework/sessions/e0117b8ca17af9c19572ddb305a272b4c22bd18d): failed to open stream: Permission denied' in /var/www/com.mtrinteractive.sandbox.form/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:81

更新#2

这是项目目录:

enter image description here

更新 #3

以下是项目的权限和所有者:

enter image description here

enter image description here

enter image description here

最佳答案

我不知道这是否有帮助,但如果您使用的是 Dockerfile,则可以添加

运行 usermod -u 1000 nginx

或者如果您使用的是 Apache,您可以使用 sub。 Apache 的 nginx。

这似乎只是 OS X 的一个问题,实际上这个问题与 VirtualBox 有关,与 Docker 没有直接关系。我在 Docker v1.9.x 和 v1.10.3 中遇到了这个问题。这次我无法使用上述解决方案解决它,但能够通过将缓存写入数据库来解决它。在这种情况下,它是 MySQL/MariaDB,但很容易成为 memcache 或 redis。

奇怪的是,创建日志文件并写入日志文件不是问题,即使该卷是单独安装的,但起源于我 Mac 的同一文件夹“/Users”。

关于php - 从 docker nginx/php-fpm 安装在本地卷(Mac)上的 Laravel 无法写入 session 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35302635/

相关文章:

ruby-on-rails - 在 JSON 响应中返回 CSRF token

session - Playframework 2、Websocket 和 session

session - Golang 和 Gorilla session - 缓存阻止注销功能

php - 将 mysql 行添加到表中 href 的末尾

php parse_str 将加号(+)转换为空格

laravel - 访问本地主机:8000 using cntlm

php - 在 php 7.2 的 laragon 上安装 php-decimal 扩展,找不到指定的模块。扩展小数点不存在

php - 交友树,添加中断

php - 如何发布禁用的输入

php - 警告 : mysqli_error() expects exactly 1 parameter, 0 给定错误