Der letzte Schritt des Prozesses besteht darin, den Cache aufzuwärmen, damit das Bild „wie es ist“ verwendet werden kann. Während der Befehl scheinbar gut funktioniert, ist das Endergebnis, dass es zwei Cache-Verzeichnisse für die Umgebung gibt, eines mit dem richtigen Namen und eines mit einer Tilde (~).
Code: Select all
root@c238674823ae:/app/var/cache# ls -la
total 0
drwxr-xr-x 1 root root 16 Jan 2 11:46 .
drwxr-xr-x 1 root root 72 Jan 2 11:46 ..
drwxr-xr-x 1 root root 146 Jan 2 11:46 prod
drwxr-xr-x 1 root root 146 Jan 2 11:46 pro~
Dies sind die Dockerfile-Schritte, in denen die Cache ist aufgewärmt:
Code: Select all
ENV COMPOSER_MEMORY_LIMIT=-1
RUN set -eux; \
mkdir -p var/cache var/log; \
composer dump-autoload -o --apcu --no-dev; \
composer dump-env prod; \
chmod +x bin/console; sync;
RUN set eux; \
rm -rf var/cache/* && \
bin/console cache:clear && \
bin/console assets:install public && \
bin/console importmap:install && \
bin/console sass:build -v && \
bin/console asset-map:compile;
Wenn ich nach dem Start der Anwendung bin/console cache:clear, jetzt funktioniert die Anwendung, aber das erfordert uns nach der Bereitstellung des neuen Images einen Befehl auszuführen, was bei jeder Bereitstellung zu einer Ausfallzeit von ein paar Sekunden führt, was unerwünscht ist.
Warum wird der Befehl „cache:clear“ nicht korrekt beendet? Warum wurde es ohne Fehler beendet, wenn es nicht korrekt beendet wurde?
Und jetzt etwas Dummes. Wenn ich das mache (cache:clear zweimal ausführen):
Code: Select all
RUN set eux; \
rm -rf var/cache/* && \
bin/console cache:clear && \
bin/console cache:clear && \
bin/console assets:install public && \
bin/console importmap:install && \
bin/console sass:build -v && \
bin/console asset-map:compile;

Code: Select all
docker run -it web-api/env-prod:local ls -la var/cache
total 0
drwxr-xr-x 1 root root 8 Jan 2 12:11 .
drwxr-xr-x 1 root root 72 Jan 2 12:11 ..
drwxr-xr-x 1 root root 170 Jan 2 12:11 prod