【问题标题】:Docker and laravel not clearing the cacheDocker 和 laravel 不清除缓存
【发布时间】:2019-03-10 22:49:59
【问题描述】:

我有一个使用 docker 和 laravel 运行的应用程序,但有一些指令显然已执行但无法正常运行。

这些指令是php artisan clear:cachephp 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 中,所以没有必要重新执行此操作

【问题讨论】:

  • 不清楚...你能粘贴你得到的可能错误的输出吗?
  • 您需要进入容器并运行这些指令吗?那么,你的 docker run 命令是什么?
  • 我需要运行 php artisan cache:clear 和 view:clear 即使这些指令在 Dockerfile 中

标签: laravel docker dockerfile laravel-artisan laravel-5.7


【解决方案1】:

Dockerfile 中使用RUN 执行的任何命令将仅在构建阶段执行。如果您希望在启动容器时运行它们而不必手动运行它们,那么您需要使用脚本,例如bash 脚本,可用作ENTRYPOINTDockerfile,然后使该脚本执行您应该运行的命令以启动应用程序。所以你的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

这将使您启动的每个容器在开始为您的应用程序提供服务之前执行所有这些命令。

您可能想要查看的其他链接:

【讨论】:

    【解决方案2】:

    你也可以使用cmd:

    sudo docker-compose exec php php /var/www/html/path_to_laravel_project_dir/artisan config:cache
    

    它将在容器中执行 artisan cmd。

    【讨论】:

      【解决方案3】:

      刚刚遇到了缓存问题:也使用 Laravel 清除(我的案例中没有涉及 Docker)

      事实是:如果 Artisan 无权清除缓存,它只会默默地失败,自豪地告诉您缓存已成功清除(叹气)。

      详情请见https://github.com/laravel/framework/issues/1179

      *在我的情况下,在我的命令之前添加简单的“sudo”就可以了......但是我失去了半个小时来理解原因(对 Laravel/Artisan 的介绍:p) *
      我有一个 Laravel v6.5

      【讨论】:

        猜你喜欢
        • 2018-11-01
        • 2018-06-04
        • 2019-10-14
        • 2020-01-24
        • 2015-05-23
        • 1970-01-01
        • 2021-03-04
        • 2017-05-27
        • 1970-01-01
        相关资源
        最近更新 更多