问题描述
我正在将开发环境从虚拟机(具有Vagrant和VirtualBox)切换到具有Docker的容器。我为wordpress成功建立了一个简单的开发环境,现在我正试图为Laravel做同样的事情。
我在Windows 10 Pro上,使用WSL2(已安装Ubuntu 20.04)。
如果我尝试打开localhost:8088
(公开了我的本地Laravel安装),则会得到:
UnexpectedValueException 流或文件“ /var/www/html/storage/logs/laravel.log”无法以附加模式打开:无法打开流:权限被拒绝
这是我的docker-compose.yml
文件:
version: '3.3'
services:
Nginx:
container_name: 'Nginx_Web_Server'
image: Nginx:stable-alpine
depends_on:
- PHP
- mariadb
ports:
- 8088:80
volumes:
- ./root:/var/www/html
- ./Nginx/default.conf:/etc/Nginx/conf.d/default.conf
PHP:
container_name: 'PHP-FPM_7.4'
build:
context: .
dockerfile: Dockerfile
volumes:
- ./root:/var/www/html
ports:
- 9090:9000
mariadb:
container_name: 'MariaDB_sql_Server'
image: mariadb
restart: unless-stopped
tty: true
volumes:
- ./mariadb_data:/var/lib/MysqL
environment:
MysqL_ROOT_PASSWORD: root
MysqL_DATABASE: laravel
MysqL_USER: ll_user
MysqL_PASSWORD: ll_password
这是Dockerfile
中指示的docker-compose.yml
:
FROM PHP:fpm-alpine3.12
RUN docker-PHP-ext-install pdo pdo_MysqL
#RUN chown -R www-data:www-data /var/www
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;
}
}
怎么了?
解决方法
可以通过以下方式解决:
chown -R www-data:www-data /var/www
chmod -R 755 /var/www/storage
如果它不适合您,请在容器中尝试以下操作:
-
检查:
docker-compose exec php ls -al /var/www/storage
我看到的是
xfs
而不是www-data
-
运行:
docker-compose exec php chown -R $USER:www-data /var/www/storage
-
运行:
docker-compose exec php chown -R $USER:www-data /var/www/bootstrap/cache
再试一次,它必须可以工作