我在Docker中创建Laravel PHP应用程序。首先,我使用
设置Laravel应用程序laravel new laravelDockerApp
它创建成功。我通过内置服务器验证它的设置
php artisan serve
然后使用Docker设置本地环境
docker-compose.yml
version: '2'
services:
web:
build:
context: ./
dockerfile: web.docker
volumes:
- ./:/var/www
ports:
- "8080:80"
links:
- app
app:
build:
context: ./
dockerfile: app.docker
volumes:
- ./:/var/www
app.docker
FROM php:7-fpm
RUN apt-get update && apt-get install -y libmcrypt-dev mysql-client \
&& docker-php-ext-install mcrypt pdo_mysql
WORKDIR /var/www
web.docker
FROM nginx:1.10
ADD ./vhost.conf /etc/nginx/conf.d/default.conf
WORKDIR /var/www
vhost.conf
server {
listen 80;
index index.php index.html;
root /var/www/public;
location / {
try_files $uri /index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
我运行docker-compose up -d
命令。应用程序web容器成功启动。当我使用
本地主机:8080
我得到了
500(内部服务器错误)
拜托,你能帮忙解决这个问题吗?感谢。
答案 0 :(得分:7)
我找到了解决方案。我使用
在Laravel应用程序上设置了权限sudo chmod -R 777 storage && sudo chmod -R 777 bootstrap/cache
答案 1 :(得分:0)
此解决方案可能不适用于您,因为您使用的是 Nginx,但就我而言,我使用 php:7.0-apache
作为源图像,因此我将 Apache 用户设为我的应用文件的所有者。
在我的 Dockerfile 中,我有:
...
USER www-data
WORKDIR /var/www/html
COPY --chown=www-data:www-data . .
...
这解决了问题,因此值得一试,要么修改您的 Dockerfile,要么 Docker Compose 在挂载卷时有一些用户权限选项。