laravel - Laravel、Nginx 和 Docker 容器,权限被拒绝
问题描述
我已经创建了一个 laravel 项目并将其放在一个 docker 容器中,它似乎都可以正常加载,但是在某些时候我收到一条错误消息:
There is no existing directory at "/Users/john/Documents/work/dashboard/src/storage/logs" and its not buildable: Permission denied
奇怪的是,Laravel 试图写入属于我的本地环境的文件或目录,而不是我期望的 docker 容器环境:
/var/www/storage/logs
这是我的 docker-compose.yml:
version: '2'
services:
# The Web Server
web:
build:
context: ./
dockerfile: web.signup.dockerfile
working_dir: /var/www
volumes:
- ./src:/var/www
- /var/www/storage
env_file: 'src/.env'
ports:
- 80:80
volumes:
dbdata:
这是我的 Dockerfile
FROM centos:latest
RUN set -ex \
&& yum install -y epel-release \
&& yum update -y mysql-client libmagickwand-dev \
&& yum install -y libmcrypt-devel \
&& yum install -y python-pip \
&& pip install --upgrade pip \
&& yum install -y zip unzip \
&& yum install -y java-1.8.0-openjdk \
&& yum clean all
RUN pip install --upgrade --ignore-installed six awscli
RUN yum install -y supervisor
RUN yum install -y php-pear php-devel
RUN pecl install imagick
# Add the Ngix
ADD nginx.repo /etc/yum.repos.d/nginx.repo
# Add the Centos PHP dependent repository
RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
RUN yum update -y
# Installing Nginx
RUN yum -y install nginx
# Installing PHP
RUN yum -y --enablerepo=remi,remi-php72 install php-fpm php-common php-mcrypt php-mbstring
WORKDIR /var/www
ADD vhost.prod.conf /etc/nginx/conf.d/default.conf
COPY src/. /var/www
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
&& php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
&& php composer-setup.php \
&& php -r "unlink('composer-setup.php');" \
&& php composer.phar install --no-dev --no-scripts \
&& rm composer.phar
RUN chown -R apache:apache \
/var/www/storage \
/var/www/bootstrap/cache
EXPOSE 80
EXPOSE 9000
RUN mkdir -p /run/php-fpm
COPY supervisord.conf /supervisord.conf
CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]
有什么想法吗?
解决方案
按设计工作,
您正在将当前目录中的“src”挂载到容器中。
volumes:
- ./src:/var/www
如果您想访问容器内的代码,您可以在构建时添加文件。
要修复您的“错误”,
chmod -R 777 /Users/john/Documents/work/dashboard/src/storage/logs
对于本地开发环境来说还可以
推荐阅读
- android - 为 Android 应用程序创建调试历史记录的最佳方法是什么
- python - 在一列上制作两列(python)
- blockchain - 如果比特币工作量证明在 10 分钟内没有成功,会发生什么?
- python - 有人能解释一下“defaultdict(lambda:0)”的作用吗
- python - django 模型中的类创建的记录未记录在 mysql 表中
- python - 如何计算蠕虫的最大宽度和长度?
- xml - XML转EXI时如何生成事件码?
- python - 如何计算负整数或零的所有数字的乘积?
- javascript - 如何在 JavaScript 中将 Map 键值转换为数组
- sql - 使用 2 个表的 SQL 查询更新计算