Erreur de permission refusée avec Laravel & Docker

J’ai deux conteneurs Docker: Nginx et App.
Le conteneur d’application étend PHP-fpm et a également mon code Laravel.

Dans mon docker-compose.yml je fais:

 version: '2' services: nginx: build: context: ./nginx dockerfile: ./Dockerfile ports: - "80:80" links: - app app: build: context: ./app dockerfile: ./Dockerfile 

Dans mon Nginx Dockerfile je fais:

 FROM nginx:latest WORKDIR /var/www ADD ./nginx.conf /etc/nginx/conf.d/default.conf ADD . /var/www EXPOSE 80 

Dans mon application Dockerfile je fais:

 FROM php:7-fpm WORKDIR /var/www RUN apt-get update && apt-get install -y libmcrypt-dev mysql-client && docker-php-ext-install mcrypt pdo_mysql ADD . /var/www 

Après avoir exécuté docker-compos up, j’ai l’erreur suivante lorsque j’essaie localhost

Le stream ou le fichier “/var/www/storage/logs/laravel.log” n’a pas pu être ouvert: Échec de l’ouverture du stream: Autorisation refusée

À ma connaissance, le dossier de stockage doit être accessible en écriture par le serveur Web.
Que dois-je faire pour résoudre ce problème?

Faites votre Dockerfile quelque chose comme ci-dessous –

 FROM php:7-fpm WORKDIR /var/www RUN apt-get update && apt-get install -y libmcrypt-dev mysql-client && docker-php-ext-install mcrypt pdo_mysql ADD . /var/www RUN chown -R www-data:www-data /var/www 

Cela rend le répertoire /var/www appartenant à www-data qui est l’utilisateur par défaut de php-fpm .

Comme il est compilé avec l’utilisateur www-data .

Ref-

https://github.com/docker-library/php/blob/57b41cfc2d1e07acab2e60d59a0cb19d83056fc1/7.0/jessie/fpm/Dockerfile

Vous pouvez faire 3 choses que j’ai utilisées / en utilisant

  1. Accorder la permission 777 au dossier de storage ( sudo chmod 777 storage/ storage/* )
  2. RUN chown -R www-data:www-data /var/www RUN chmod 755 /var/www

  3. Déplacez le dossier de projet vers /home sans autorisation spéciale pour écrire sur ce répertoire ( Recommandez-le moi personnellement ) (Dans le mien, j’ai utilisé /home/projects/ et tous y ont été placés).


Note: Si le projet est dans /var/www/ alors si vous avez écrit le téléchargement de fichier, vous devez également avoir une autorisation pour ces dossiers. cela évitera une telle erreur lorsque vous l’avez déplacé vers /home

Il est clair que le dossier n’est pas accessible en écriture, généralement sous Linux, nous devons donner l’autorisation

Voici comment vous pouvez utiliser

 sudo chmod -Rf 777 "/var/www/storage/logs/laravel.log 

J’ai trouvé un problème similaire et je l’ai corrigé par

 chown -R www-data:www-data /var/www chmod -R 755 /var/www/storage