web-dev-qa-db-fra.com

Erreur d'autorisation refusée avec Laravel et Docker

J'ai deux conteneurs docker: Nginx et App.
Le conteneur d'applications étend PHP-fpm et contient é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 App 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 réussi à exécuter docker-compos up, le message d'erreur suivant s'affiche lorsque j'essaie localhost

Le flux ou le fichier "/var/www/storage/logs/laravel.log" n'a pas pu être ouvert: ouverture du flux impossible: autorisation refusée

De ma compréhension, le dossier de stockage doit être inscriptible par le serveur Web.
Que devrais-je faire pour résoudre ce problème?

5
Anand Naik B

Faites de 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 pour php-fpm

Depuis qu'il est compilé avec l'utilisateur www-data.

Ref- 

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

12
vivekyad4v

J'ai trouvé un problème similaire et je l'ai résolu par 

chown -R www-data:www-data /var/www

chmod -R 755 /var/www/storage
5

Vous pouvez faire 3 choses comme j'ai utilisé/en utilisant

  1. Accorder l'autorisation 777 au dossier 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 du projet vers /home, ce qui ne nécessite pas d’autorisation spéciale pour écrire sur ce répertoire (Personnellement recommande ceci) (Dans le mien, j’ai utilisé /home/projects/ et tous les y ont été placés). 


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

4
Abdulla Nilam

vous pouvez simplement cliquer avec le bouton droit de la souris sur votre dossier laravel, cliquer sur les propriétés, puis sur les autorisations et, dans le champ 'groupe', sélectionner le 'menu fixe' et attribuer les autorisations nécessaires au groupe 'docker' :)

0
rogal127