Общий каталог внутри контейнера docker для размещения локального каталога

#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, которое также делает то же самое, что и ваше. Они загружают исходный код из Интернета при запуске контейнера и заполняют его на том.