Маршруты не обновляются внутри моего контейнера Laravel - PullRequest
0 голосов
/ 29 января 2019

У меня есть этот docker-compose:

version: '3'
services:
  app:
    build:
      context: .
      dockerfile: .docker/Dockerfile
    image: laravel-docker
    ports:
      - 8080:80
    volumes:
      - ./:/var/www
    links:
      - mysql
      - redis
    environment:
      DB_HOST: mysql
      DB_DATABASE: laravel_docker
      DB_USERNAME: app
      DB_PASSWORD: password
      REDIS_HOST: redis
      SESSION_DRIVER: redis
      CACHE_DRIVER: redis
  mysql:
    image: mysql:5.7
    ports:
      - 13306:3306
    environment:
      MYSQL_DATABASE: laravel_docker
      MYSQL_USER: app
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: password
  redis:
    image: redis:4.0-alpine
    ports:
      - 16379:6379

и этот Dockerfile:

FROM php:7.1.8-apache

COPY . /srv/app
COPY .docker/vhost.conf /etc/apache2/sites-available/000-default.conf

WORKDIR /srv/app


RUN docker-php-ext-install mbstring pdo pdo_mysql \
    && chown -R www-data:www-data /srv/app
RUN a2enmod rewrite

, который является моей конфигурацией для запуска контейнера Laravel с MySQL и Redis.Все работает отлично, но у меня возникают проблемы, когда я пытаюсь добавить (или обновить) новый маршрут: он не появится, пока я не остановлю все контейнеры и не перезапущу их с тегом --build.

Есть ли способ добавлять и обновлять маршруты без перезапуска моих контейнеров?

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Мне было бы любопытно узнать, правильно ли ваши изменения распространяются на ваш том.Это может быть проблема с разрешениями внутри контейнера.Что произойдет, если вы подключитесь к контейнеру и «разметите» содержимое файла маршрутов?Соответствует ли он файлу вне контейнера?На какой ОС вы используете докер?Насколько заблокирована файловая система ОС?Есть ли какие-то ограничения, которые заставили бы работать объемы в стиле фанк?Кроме того, какой процесс синхронизации файловой системы вы используете?Вы просто используете по умолчанию?

0 голосов
/ 29 января 2019

На основе Dockerfile ваше приложение находится в / srv / app, но в файле yml вы указываете / var / www в качестве цели монтирования.Измените это на / srv / app

Объяснение: Создание Dockerfile приводит к неизменяемому изображению.Программное обеспечение внутри образа было настроено для обслуживания вашего приложения из / srv / app.Так как COPY . /srv/app добавило ваше приложение к изображению в нужном месте, оно может быть оттуда просто отлично обработано, но эта команда добавляет его при построении изображения, а затем оно становится неизменной частью изображения, поэтому измененияМарка на хосте не будет видна внутри.Что вы хотите сделать, так это связать монтирование каталога вашего проекта с / srv / app, и это замаскирует (временно «заменит») содержимое этого каталога на тот, что находится на вашем хосте, и это то, что делает эта строка yml.(Между прочим, монтирование скрывает, что существующий каталог не зависит от docker.)

https://docs.docker.com/storage/bind-mounts/#mounting-into-a-non-empty-directory-on-the-container

Причина, по которой мы часто копируем и привязываем каталоги наших проектов, заключается в том, что эта практика позволяет намиспользовать один и тот же Dockerfile как для разработки (без частой перестройки образа), так и для производства.

0 голосов
/ 29 января 2019

ssh в контейнер приложения и из каталога проекта выполните эту команду:

php artisan route:clear

...