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?
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-
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
Vous pouvez faire 3 choses comme j'ai utilisé/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 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
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' :)