Не удается очистить кэш Laravel при использовании нескольких контейнеров Docker - PullRequest
1 голос
/ 06 мая 2019

Мне не удается обновить кэш Laravel, и я думаю, что проблема может быть связана с использованием нескольких контейнеров Docker, работающих со стеком Laravel. Я пробовал php artisan cache:clear и php artisan config:cache. Я удалил bootstrap/cache/config.php, но файл снова появляется со старой конфигурацией, как какое-то неживое существо, преследующее меня.

Единственный способ обновить кэш-память - полностью удалить контейнеры с docker-compose down, а затем снова запустить контейнеры.

В моем docker-compose ниже вы можете видеть, что все мое приложение, очередь и контейнеры планировщика запускают стек Laravel с кодовой базой, смонтированной с хоста. Может ли это быть причиной проблемы?

докер-compose.yml

version: '3'
services:

  #PHP Service
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: digitalocean.com/php
    container_name: app
    restart: unless-stopped
    tty: true
    env_file: '.env'
    environment:
      SERVICE_NAME: app
      SERVICE_TAGS: dev
      #APP_ENV: local
    working_dir: /var/www
    volumes:
      - ./:/var/www
      - ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
      - ./php/opcache.ini:/usr/local/etc/php/conf.d/opcache.ini
    networks:
      - app-network

  scheduler:
    image: digitalocean.com/php
    container_name: scheduler
    restart: unless-stopped
    depends_on:
      - app
    volumes:
      - .:/var/www
    env_file: '.env'
    environment:
      CONTAINER_ROLE: scheduler
    networks:
      - app-network

  queue:
    image: digitalocean.com/php
    container_name: queue
    restart: unless-stopped
    depends_on:
      - app
    volumes:
      - .:/var/www
      - ./supervisor/supervisord.conf:/etc/supervisor/supervisord.conf
      - ./supervisor/conf.d:/etc/supervisor/conf.d
    env_file: '.env'
    environment:
      CONTAINER_ROLE: queue
    networks:
      - app-network

  #Nginx Service
  webserver:
    image: nginx:alpine
    container_name: webserver
    restart: unless-stopped
    tty: true
    ports:
      - "${local_ip}:${host_web_port}:80"
      #- "${local_ip}:443:443"
    volumes:
      - ./:/var/www
      - ./nginx/conf.d/:/etc/nginx/conf.d/
    networks:
      - app-network

  #MySQL Service
  db:
    image: mysql:5.7.26
    container_name: db
    restart: unless-stopped
    tty: true
    ports:
      - "${local_ip}:${host_db_port}:3306"
    environment:
      MYSQL_DATABASE: dbname
      MYSQL_USER: laravel
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: root_password
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes:
      - dbdata:/var/lib/mysql/
      - ./mysql/my.cnf:/etc/mysql/my.cnf
    networks:
      - app-network

#Docker Networks
networks:
  app-network:
    driver: bridge

#Volumes
volumes:
  dbdata:
    driver: local

Может кто-нибудь сказать мне, как я могу перезагрузить кеш без необходимости уничтожать контейнеры?

Ради полноты я настроил среду Docker, используя это руководство: https://www.digitalocean.com/community/tutorials/how-to-set-up-laravel-nginx-and-mysql-with-docker-compose

Я запускаю контейнеры очереди и планировщика, используя это руководство: https://laravel -news.com / laravel-scheduler-queue-docker . Однако я изменил очередь для запуска Supervisor.

start.sh

#!/usr/bin/env bash

set -e

role=${CONTAINER_ROLE:-app}
env=${APP_ENV:-production}

if [ "$env" != "local" ]; then
    echo "Caching configuration..."
    (php artisan config:cache && php artisan view:cache) # && php artisan route:cache - can't cache route closures
fi

if [ "$role" = "app" ]; then

    exec php-fpm

elif [ "$role" = "queue" ]; then

    echo "Running the queue..."
    /usr/bin/supervisord

elif [ "$role" = "scheduler" ]; then

    while [ true ]
    do
      php artisan schedule:run --verbose --no-interaction &
      sleep 60
    done

else
    echo "Could not match the container role \"$role\""
    exit 1
fi

1 Ответ

0 голосов
/ 17 мая 2019

Я думаю Теперь я понимаю, что со мной происходит. Мои параметры конфигурации Laravel определяются файлом .env, который мой файл docker-compose.yml также читает для установки переменных среды контейнера. Эти переменные среды контейнера нельзя изменить во время выполнения , и они всегда имеют приоритет над изменениями, внесенными в файл .env во время работы контейнеров.

Остановка и запуск контейнера не изменяет переменные среды. Мои изменения вступят в силу только после уничтожения контейнера и повторного запуска его, перечитав таким образом файл .env для установки переменных среды.

Тогда следует правильно настроить .env только для Laravel и отдельный файл для переменных среды контейнера. Другими словами, измените запись env_file: '.env' в docker-compose.yml.

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