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-
Vous pouvez faire 3 choses que j’ai utilisées / en utilisant
storage
( sudo chmod 777 storage/ storage/*
) RUN chown -R www-data:www-data /var/www RUN chmod 755 /var/www
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