使用Dockerfile的L aravel权限被拒绝的存储文件夹

时间:2019-05-05 17:37:57

标签: laravel docker-compose dockerfile

我正在使用docker-compose.yml运行我的Laravel应用。如果我跑步,一切都会很好

chmod -R 755 storage

在幼虫的根中。

但是我想要在Dockerfile上定义权限。 app / docker / web / Dockerfile

FROM php:7.2.10-apache-stretch

RUN apt-get update -yqq && \
    apt-get install -y apt-utils zip unzip && \
    apt-get install -y nano && \
    apt-get install -y libzip-dev libpq-dev && \
    apt-get install -y libxml2-dev && \
    apt-get install -y libcurl4-openssl-dev pkg-config libssl-dev && \
    a2enmod rewrite && \
    docker-php-ext-configure zip --with-libzip && \
    docker-php-ext-install zip && \
    rm -rf /var/lib/apt/lists/*

RUN pecl install mongodb && \
    docker-php-ext-enable mongodb

RUN curl -sS https://getcomposer.org/installer | php -- --install- 
   dir=/usr/local/bin --filename=composer

COPY default.conf /etc/apache2/sites-enabled/000-default.conf

WORKDIR /var/www/app

ADD . /var/www/app

RUN chown -R www-data: /var/www/app
RUN chmod -R 755 /var/www/app/storage

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

EXPOSE 80

还有docker-compose.yml

version: '3.1'
services:
    web:
        container_name: ${APP_NAME}
        build:
            context: ./docker/web
        ports:
            - 8088:80
        volumes:
            - ./:/var/www/app
        depends_on:
            - mongo
        links:
            - mongo:mongo
   mongo:
        image: mongo
        restart: always
         ports:
            - "27016:27016"
        volumes:
            - ./storage/mongodb:/data/db
        environment:
            MONGO_INITDB_ROOT_USERNAME: root
            MONGO_INITDB_ROOT_PASSWORD: password

运行docker-compose时

chmod: cannot access '/var/www/app/storage': No such file or directory
ERROR: Service 'web' failed to build: The command '/bin/sh -c chmod -R 
755 /var/www/app/storage' returned a non-zero code: 1

有人可以告诉我我做错了什么吗? 预先感谢。

2 个答案:

答案 0 :(得分:1)

我猜这个图像的默认用户是ubuntu,您正在将文件夹权限切换为www-data,这将使默认用户能够读取但不能写入。

对于将apache作为www-data运行的生产设置来说是正确的,但是请注意,您正在以该图像的默认用户身份启动apache,因此请尝试删除这两个语句:

RUN chown -R www-data: /var/www/app
RUN chmod -R 755 /var/www/app/storage

这样,安装文件夹的同一用户也将运行apache

如果这行不通,请全力以赴,然后让超级用户使用以下命令运行所有步骤

USER root

答案 1 :(得分:0)

在Dockerfile中,您已经在映像中复制文件:ADD . /var/www/app

因此,在您的docker-compose.yml中映射该卷也没有意义。

解决方案是删除Web服务中的卷声明:

         volumes:
            - ./:/var/www/app