Докер и Ларавел не очищают кеш - PullRequest
0 голосов
/ 11 марта 2019

У меня есть приложение, работающее с Docker и Laravel, но есть некоторые инструкции, которые, очевидно, выполняются, но не работают.

Это инструкции php artisan clear:cache и php artisan optimize.Иногда мне нужно попасть в контейнер и выполнить эти инструкции, чтобы мои изменения отображались в браузерах.Помимо сбоев, которые обнаруживает kubernetes из-за неотраженных изменений

FROM php:7.2.0-fpm as php

RUN apt-get update && apt-get install -y openssl openssh-client \
    rsync sshpass zip unzip git vim libmcrypt-dev mysql-client \
    libssh2-1-dev libmagickwand-dev \n
    gnupg2 --no-install-recommends zlib1g-dev sass \
    && pecl install mcrypt-1.0.1 \
    && docker-php-ext-enable mcrypt \
    && pecl install imagick \
    && docker-php-ext-enable imagick \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install gd \
    && docker-php-ext-install zip \
    && pecl install ssh2-1.0  \
    && docker-php-ext-enable ssh2

RUN curl --silent --location https://deb.nodesource.com/setup_11.x | bash -
RUN apt-get install -y nodejs
RUN npm install --global bower

WORKDIR /var/www/html

COPY install-composer.sh install-composer.sh
RUN bash ./install-composer.sh

COPY composer.json ./
COPY composer.lock ./
RUN composer install --no-scripts --no-autoloader
COPY . ./
RUN composer update
RUN composer install

COPY zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf

RUN mkdir -p /var/run/php/sock/

RUN sass resources/sass/style.scss:public/assets/stylesheets/style.css
RUN bower install --allow-root

RUN composer dump-autoload
RUN php artisan vendor:publish --provider="Sentry\SentryLaravel\SentryLaravelServiceProvider"

ONBUILD chown -R www-data:www-data .
RUN php artisan optimize && php artisan config:cache \
    && php artisan view:cache && php artisan view:clear

Большую часть времени мне нужно попасть в контейнер и запустить php artisan optimize, view: cache и view: clear снова, даже если онинаходятся в Dockerfile, поэтому нет необходимости делать это снова и снова

1 Ответ

2 голосов
/ 11 марта 2019

Любые команды, которые выполняются с использованием RUN в Dockerfile, будут выполняться только на этапе сборки. Если вы хотите запустить их во время запуска контейнера, чтобы вам не приходилось запускать их вручную, вам нужно использовать скрипт, например. bash-скрипт, который можно использовать как ENTRYPOINT для вашего Dockerfile, а затем заставить этот скрипт выполнить команду, которую вы должны запустить, чтобы запустить приложение. Так что ваш entrypoint.sh может выглядеть так:

# entrypoint.sh
#!/usr/bin/env sh
...
php artisan optimize
php artisan config:cache
php artisan view:cache
php artisan view:clear
...
php artisan serve # or use exec "$@" and pass php artisan serve through CMD in Dockerfile

Это заставит каждый запущенный вами контейнер выполнять все эти команды перед началом обслуживания вашего приложения.

Другие ссылки, которые вы можете проверить:

...