#docker #docker-compose
Вопрос:
У меня есть каталог внутри моего контейнера docker /var/www/example
(включает файлы сайта). Файлы заполняются при создании и обновлении образа docker. Я буду иногда обновлять код и заменять измененные файлы на rsync, и я хочу поделиться /var/www/example
dir на хост-машине ./www dir. Я создал docker-compose.yml (nginx,php-fpm,mariadb)
services:
app:
build:
context: ./app
dockerfile: Dockerfile
container_name: app
restart: always
volumes:
- "./www:/var/www/example"
и если включить опцию тома, она заменит мое /var/www/example
на пустое на ./www
dir, но мне нужно обратное, файлы из контейнера должны отображаться в каталоге локального хоста ./www
, как я могу это сделать?
Комментарии:
1. С набором задач, которые вы описываете, я бы вообще не использовал том Docker. При обновлении кода зафиксируйте его в системе управления версиями,
docker-compose build
новом образе и используйтеdocker-compose up
для автоматической остановки, удаления и повторного создания контейнера. Описанный вами подход может привести к потере данных, если контейнер будет удален, и если система каким-либо образом выйдет из строя, вы не сможете легко определить, какой именно код был запущен в момент сбоя.
Ответ №1:
Именно так работает том docker, он должен уважать том хоста и применять любые изменения на томе хоста к контейнеру. Я думаю, что вам просто нужно сначала ввести исходный код в том вашего хоста. В противном случае, если вам нужно сохранить текущую логику, вы можете просто заполнить исходный код в контейнере в другую папку, скажем /var/www/example2
, и выполнить команду «Точка входа» или «выполнить cp -r /var/www/example2 /var/www/example
«.
P/s: Я думаю, вам нужно будет проверить /var/www/example
, пуста ли папка, прежде чем делать копию.
Существует изображение докера с именем Mautic, которое также делает то же самое, что и ваше. Они загружают исходный код из Интернета при запуске контейнера и заполняют его на том.