Есть ли способ переопределить папку хоста папкой контейнера с помощью томов в Docker?

#docker #docker-compose #docker-volume

Вопрос:

Я довольно новичок в использовании Docker и Docker Compose (использование Docker Compose для этой конкретной проблемы). Вот что я до сих пор знаю о проблеме, с которой я сталкиваюсь: при использовании томов, когда содержимое доступно в папке хоста, а также в папке контейнера, файлы внутри папки контейнера скрыты, а файлы хоста затем становятся доступными для контейнера.

Я хочу использовать его наоборот. Я хотел бы сделать доступными файлы контейнера (которые были скопированы в изображение в файле Dockerfile) в папке хоста.

Есть ли способ сделать это?

Вот несколько скриншотов моего файла Dockerfile и Docker Compose, чтобы показать мои настройки.

Скриншот файла Dockerfile

Снимок экрана DockerCompose

Заранее спасибо! 🙂

Ответ №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 командой. Я понимаю, что это создает огромное препятствие (для которого я не могу найти решения), но все еще надеюсь, что для этой проблемы существует более элегантное решение. Спасибо вам за вашу помощь, несмотря ни на что! 🙂