Docker和laravel不清除缓存

Docker and laravel not clearing the cache

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

这些指令是php artisan clear:cachephp artisan optimize
有时,我需要进入容器并运行这些说明,以使我的更改反映在浏览器中。除了kubernetes因未反映的更改而检测到的故障之外

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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 \

    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,即使它们在Dockerfile中,也要再次清除view:cache和view:clear,所以不必重新做一次<铅>


Dockerfile中使用RUN执行的任何命令都只会在构建阶段执行。如果您希望在启动容器时运行它们,而不必手动运行它们,则需要使用脚本,例如可用作Dockerfile的ENTRYPOINT的bash脚本,然后使该脚本执行应运行的命令以启动应用程序。因此,您的entrypoint.sh可能如下所示:

1
2
3
4
5
6
7
8
9
# 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

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

您可能要检查的其他链接:

  • Dockerfile中的CMD和ENTRYPOINT有什么区别?

  • set -e和exec a€$ @ a€是什么?为docker entrypoint脚本做什么?


您也可以使用cmd:

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

它将在容器中执行artisan cmd。


只是遇到了缓存问题:Laravel也很清楚(我的案例中不涉及Docker)

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

有关更多详细信息,请参见https://github.com/laravel/framework/issues/1179

*在我的情况下,在命令执行之前添加了简单的" sudo"就可以了...但是我却花了半个小时才了解原因(关于Laravel / Artisan的介绍:p)
*我有一个Laravel v6.5