Контейнер Docker Apache теряет статические данные сайта после перезагрузки

У меня есть контейнер Docker, который обслуживает некоторые php-страницы с Symfony. Он также имеет подключение к базе данных, которое отлично работает. Корневой каталог — /var/www/html/public, а грубая структура /var/www/html выглядит следующим образом (-файлы и [каталоги]):

[/var/www/html]
  -Dockerfile
  -package.json
  -vendor
  -src
  -someotherstuff
  [public]
     index.php
     favicon.ico
     [CSS]
     [Javascript]
     [uploads -> this folder is a volume, users can upload their own data]
        -userFileA
        -userFileB

Когда я запускаю контейнер с помощью этой команды, все работает отлично:

docker run -d --restart always --name myContainerName -e DATABASE_URL=mysql://mysql:${DB_PW}@mysql:3306/myDbName -e APP_ENV=${ENV_TYPE} -e APP_SECRET=******** -v myapp_data:/var/www/html/public/uploads -p 127.0.0.1:82:80 --net mysql_net myId/myRepo –

После перезагрузки сервера все файлы, кроме папки «uploads» внутри общедоступной, удаляются, и файлы сервера выглядят следующим образом:

[/var/www/html]
  -Dockerfile
  -package.json
  -vendor
  -src
  -someotherstuff
  [public]
     [uploads -> this folder is a volume]
        -userFileA
        -userFileB

Теперь веб-сайт полностью сломан, потому что index.php в общей папке отсутствует.

Я не понимаю, почему это происходит и только при перезагрузке. Если между томом и другой папкой возник конфликт, разве это не должно происходить при первом запуске? И почему удаляются только файлы внутри паблика, а не снаружи? Я действительно запутался, и большая часть информации, которую я могу найти по этим темам, является ошибкой, потому что том настроен неправильно, но мой том работает нормально, и на самом деле это единственное, что все еще правильно заполнено после перезагрузки.

Это мой Dockerfile и команды, которые я использую для его сборки:

#docker build --tag=myId/myRepo .
#docker push myId/myRepo
FROM php:7.2-apache
ENV DB_HOST=mysql:3306 \
    DB_USER=myDbUser \
    DB_NAME=myDbName
COPY php.ini "$PHP_INI_DIR/php.ini"
RUN docker-php-ext-install pdo_mysql && a2enmod rewrite
COPY ./ /var/www/html/
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
VOLUME /var/www/html/public/uploads/

покажите команду, которую вы используете для запуска контейнера.

Michał Krzywański 11.07.2019 06:49

@michalk после создания тома myapp_data я выполнил эту команду: docker run -d --restart always --name myContainerName -e DATABASE_URL=mysql://mysql:${DB_PW}@mysql:3306/myDbName -e APP_ENV=${ ENV_TYPE} -e APP_SECRET=******** -v myapp_data:/var/www/html/public/uploads -p 127.0.0.1:82:80 --net mysql_net myId/myRepo

Juliette 11.07.2019 07:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
209
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Моя ошибка заключалась в том, что я указал VOLUME /var/www/html/public/uploads/ в Dockerfile

После удаления этой строки и создания папки только с помощью docker run -v ... ошибка больше не возникала.

Другие вопросы по теме