Задать вопрос
@Vadim_laka

Как заставить volumes Docker compose не затирать данные из контейнера?

Пробрасываю том в docker-compose
volumes: 
   - ./www:/var/www/html


Ожидаю что файлы из директории var/www/html попадут на хост в ./www
Но туда не то чтобы ничего не попадает, а еще и затирает все в контейнере по этому адресу.
Тут уже отвечали что это нормальное его поведение. Но вот есть одно но.
Если я буду использовать официальный образ wordpress с докерхаба, то так же смонтировав корень вердпресса на хост данные и отобразятся у меня на хосте и не будут потерты в контейнере. Значит как то можно это сделать. Интересно как
  • Вопрос задан
  • 1926 просмотров
Подписаться 2 Средний 8 комментариев
Решения вопроса 1
Ожидаю что файлы из директории var/www/html попадут на хост в ./www

Нет. Наоборот. Монтируется что-то (папка или docker volume) внутрь контейнера, заменяя собой ранее существовавшую (если) в контейнере папку. Или индивидуальный файл.
volumes: 
   - /папка_на_хосте:/папка_в_контейнере_1
   - имя_тома:/папка_в_контейнере_2
После этого, если внутри контейнера в этой папке создаётся файл, он оказывается в папке_хоста или томе.

WordPress при запуске смотрит, есть ли его файлы в папке. И если папка пуста — инсталлируется, распаковывает все свои файлы в неё.

При этом, разумеется, раз смонтирована папка хоста — все файлы появляются в ней.

Т.е. нет изначально никаких файлов в контейнере в /var/www/html — будь она папкой контейнера или смонтированной в него папкой хоста или томом докера. При запуске, если там пусто, файлы создаются / записываются контейнером.

Если хочется так же, создайте баш-скрипт entrypoint.sh, в который поместите логику инициализации приложения, в т.ч. копирование-создание файлов. Укажите его как ENTRYPOINT контейнера.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы