У меня есть контейнер 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/
@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






Моя ошибка заключалась в том, что я указал VOLUME /var/www/html/public/uploads/ в Dockerfile
После удаления этой строки и создания папки только с помощью docker run -v ... ошибка больше не возникала.
покажите команду, которую вы используете для запуска контейнера.