Olá, tenho uma aplicação Vuejs/Laravel que quero que rode pelo docker. Criei o Dockerfile do php e também o docker-compose e tudo funciona normalmente na construção das images e containers. No entando, tenho alguns problemas de permissão, pois meu container não consegue escrever no arquivo de logs da aplicação e eu não consigo editar/excluir arquivos e pastas geradas pelos containers. Pelo que entendi, minha máquina e os containers estão compartilhando os mesmos volumes mas não as mesmas permissões.
Mensagem de erro da aplicação rodando em um container do php.
UnexpectedValueException
The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened in append mode: failed to open stream: Permission denied
Mensagem de erro caso eu tente por exemplo excluir a pasta node_modules criada pelo container do yarn (rm -rf node_modules).
...
rm: cannot remove 'node_modules/cssnano-preset-default/node_modules/postcss/lib/result.js': Permission denied
...
docker-compose.yml
version: '3'
services:
nginx:
image: nginx:stable-alpine
container_name: nginx
ports:
- 8088:80
volumes:
- ./src:/var/www/html
- ./server/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- mysql
networks:
- laravel_vue_template
mysql:
image: mysql:5.7.22
container_name: mysql
restart: unless-stopped
tty: true
ports:
- 4306:3306
volumes:
- ./database:/var/lib/mysql
environment:
DB_DATABASE: laravel
DB_USERNAME: root
DB_PASSWORD: secret
networks:
- laravel_vue_template
php:
build:
context: ./docker/php
dockerfile: Dockerfile
container_name: php
volumes:
- ./src:/var/www/html
ports:
- 9000:9000
networks:
- laravel_vue_template
composer:
image: composer:latest
container_name: composer
working_dir: /var/www/html
volumes:
- ./src:/var/www/html
networks:
- laravel_vue_template
artisan:
build:
context: ./docker/php
dockerfile: Dockerfile
container_name: artisan
entrypoint: ['/var/www/html/artisan']
working_dir: /var/www/html
volumes:
- ./src:/var/www/html
depends_on:
- mysql
networks:
- laravel_vue_template
yarn:
image: node:14.15
container_name: yarn
entrypoint: ['yarn']
working_dir: /var/www/html
volumes:
- ./src:/var/www/html
networks:
- laravel_vue_template
networks:
laravel_vue_template:
docker/php/Dockerfile (Dockerfile do PHP)
FROM php:7.4-fpm-alpine
RUN docker-php-ext-install pdo pdo_mysql
server/default.conf (Configuração do NGINX)
server {
listen 80;
index index.php index.html;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Gostaria que os containers e meu usuário sempre compartilhassem as mesmas permissões a todos os arquivos e pastas do projeto independente de quem é o dono do arquivo/pasta.