L aravel В доступе к папке запрещен доступ с использованием Dockerfile - PullRequest
0 голосов
/ 05 мая 2019

Я использую 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 ]

1 голос
/ 05 мая 2019

Я предполагаю, что этот пользователь по умолчанию для этого изображения - Ubuntu, и вы переключаете разрешения папок на www-данные, что делает пользователя по умолчанию способным читать, но не писать.

Это правильно для производстваsetup, в котором apache будет запускаться как www-data, но обратите внимание, что вы запускаете apache в качестве пользователя по умолчанию для этого образа, поэтому попробуйте удалить оба этих утверждения:

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

Таким образом, тот же пользователь, который являетсяпри монтировании папок также будет работать apache

Если это не сработает, просто впадайте в бешенство и просто заставьте суперпользователя выполнить все шаги с

USER root
0 голосов
/ 05 мая 2019

В вашем Dockerfile вы уже копируете файлы внутри изображения: ADD . /var/www/app.

По этой причине нет смысла также отображать том в вашем docker-compose.yml.

Решение состоит в том, чтобы УДАЛИТЬ объявление объема в вашем веб-сервисе:

         volumes:
            - ./:/var/www/app
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...