首页 > 解决方案 > 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"]

有什么想法吗?

标签: laraveldockernginxcontainerslaravel-5.6

解决方案


按设计工作,

您正在将当前目录中的“src”挂载到容器中。

 volumes:
  - ./src:/var/www

如果您想访问容器内的代码,您可以在构建时添加文件。

要修复您的“错误”,

chmod -R 777 /Users/john/Documents/work/dashboard/src/storage/logs

对于本地开发环境来说还可以


推荐阅读