#docker #docker-compose #docker-volume
Вопрос:
Я довольно новичок в использовании Docker и Docker Compose (использование Docker Compose для этой конкретной проблемы). Вот что я до сих пор знаю о проблеме, с которой я сталкиваюсь: при использовании томов, когда содержимое доступно в папке хоста, а также в папке контейнера, файлы внутри папки контейнера скрыты, а файлы хоста затем становятся доступными для контейнера.
Я хочу использовать его наоборот. Я хотел бы сделать доступными файлы контейнера (которые были скопированы в изображение в файле Dockerfile) в папке хоста.
Есть ли способ сделать это?
Вот несколько скриншотов моего файла Dockerfile и Docker Compose, чтобы показать мои настройки.
Заранее спасибо! 🙂
Ответ №1:
Я сталкивался с одним и тем же много раз, и мой подход к этому таков.
Поскольку том хоста всегда будет иметь приоритет над файловой системой контейнера, вы должны сначала скопировать файлы из контейнера на хост, а затем смонтировать их обратно — таким образом, вы получите то, что было изначально, а также то, что может измениться в будущем (контейнером).
Ниже приведен весь псевдокод, но, надеюсь, он должен имитировать концепцию:
Сначала запустите основной контейнер:
docker run --rm -d --name my-container registry/image-name
Затем скопируйте нужные файлы из него в локальную файловую систему
docker cp my-container:/files/i/want ./files
Затем остановите исходный контейнер
docker stop my-container
Затем установите их обратно в контейнер при следующем запуске
docker run --rm -d --name my-container -v ./files:/files/i/want registry/image-name
Очевидно, вы также упомянули о создании там, поэтому просто отразите сопоставление тома в формате создания — копирование необходимо будет выполнить с помощью стандартного докера, однако в соответствии с вышеизложенным.
Примечание: Я написал вышеуказанные команды вслепую, но проверю их за обедом и исправлю любые ошибки — но концепция верна
Комментарии:
1. Привет, Дэн, спасибо тебе за твой ответ! 🙂 Проблема, с которой я сталкиваюсь при таком подходе, заключается в том, что сочинение будет выполняться на сервере, и от меня требуется (моим руководителем) разработать систему, которая будет работать только с
docker-compose up
командой. Я понимаю, что это создает огромное препятствие (для которого я не могу найти решения), но все еще надеюсь, что для этой проблемы существует более элегантное решение. Спасибо вам за вашу помощь, несмотря ни на что! 🙂