2016-10-21 2 views
2

У меня есть Dockerfile, который создает изображение, которое предоставляет мне сложную среду для цепочки инструментов для компиляции проекта на смонтированном томе из файловой системы хост-машин. Другая причина в том, что у меня нет места на изображении.Как разместить файлы на общем томе из Dockerfile?

Dockerfile создает мою цепочку инструментов в образе ОС, а затем готовит источник, загружая пакеты для размещения на общем томе хостов. И обычно оттуда я должен войти в изображение и выполнить команды для сборки. И в этом проблема. Я могу загрузить исходный файл в Dockerfile, но как же я могу получить его на общий том.

В принципе у меня есть ...

ADD http://.../file mydir 
VOLUME /home/me/mydir 

Но тогда, конечно, я получаю ошибку «не может смонтировать тома поверх существующего файла ...»

Собираюсь ли я об этом не так?

ответ

4

ты об этом не так, но вы уже подозревали, что.

Если вы хотите, исходные файлы находятся на хост файловой системы, избавиться от VOLUME директиву в вашем файле Docker, и не пытайтесь загружать исходные файлы во время сборки. Это то, что вы хотите сделать во время выполнения. Вы, вероятно, хотите, чтобы положение изображения с парой сценариев:

  • Один, который загружает файлы в определенное место, скажем, /build.

  • Другое, что фактически запускает процесс сборки.

С этим на месте, вы можете сначала загрузить исходные файлы в папку на хост файловой системы, как в:

docker run -v /path/on/my/host:/build myimage fetch-sources 

И тогда вы можете построить их, запустив:

docker run -v /path/on/my/host:/build myimage build-sources 

С помощью этой модели:

  • Вы пытаетесь обмануть тома во время процесса сборки изображения. Это почти никогда не то, что вы хотите, поскольку данные, хранящиеся в томе, явно исключены из образа, и процесс сборки не позволяет вам удобно монтировать каталоги хостов внутри контейнера.

  • Вы можете загружать файлы в постоянное место на хосте, где они будут доступны для редактирования или перестройки, или что-то еще.

  • Вы можете запустить процесс сборки несколько раз, не перегружая исходные файлы каждый раз.

Я думаю, что это будет делать то, что вы хотите, но если это не соответствует вашим потребностям или если что-то неясно, сообщите мне.

+0

Есть ли возможность загрузить артефакты через докер через wget или curl или что-нибудь еще в хост-системе? – R0MANARMY

+0

Спасибо за разъяснение, я начал подозревать, что я ошибся. – Ender

+0

@ R0MANARMY конечно. Это позволяет вам инкапсулировать знания о удаленном источнике в изображении Docker, вместо того чтобы требовать, чтобы кто-то каждый раз просматривал его. Если это только для личного использования, возможно, это просто спасет вас когда-нибудь, но это также облегчит вам распространение его кому-то другому. – larsks

Смежные вопросы