2016-02-20 2 views
2

У меня есть Docker файл, который содержит строку, как этотКопирование файла с хост-ОС докер изображение

FROM ubuntu:14.04 
RUN curl -Lso serf.zip https://URL/serf.zip \ 
&& unzip serf.zip -d /bin \ 
&& rm serf.zip 

И это означает, что он загружает файл и распаковать его в Linux изображения (здесь это Ubuntu -14,04).

Теперь я не хочу использовать этот URL. Вместо этого у меня есть файл на моей локальной (главной) машине, которая является Ubuntu-12.04. Вопрос в том, как передать файл из ОС хоста на образ докеров? Затем я могу изменить файл Docker на

FROM ubuntu:14.04 
RUN unzip serf.zip -d /bin \ 
&& rm serf.zip 

?

P.S: В настоящее время у меня есть следующие изображения

$ docker images 
REPOSITORY   TAG     IMAGE ID   CREATED    VIRTUAL SIZE 
<none>    <none>    99ca37acd529  39 hours ago  261.2 MB 
data-analytics  dataset    1db2326dc82b  2 days ago   1.742 GB 
ubuntu    14.04    780bd4494e2f  4 weeks ago   187.9 MB 

ответ

4
FROM whatever 
COPY contextfile containerfile 
RUN do_thing_to containerfile 

в вашем случае

FROM ubuntu:14.04 
COPY serf.zip serf.zip 
RUN unzip serf.zip -d /bin \ 
&& rm serf.zip 
  1. Файл должен быть в контексте сборки. Обычно это означает, что он находится в каталоге или подкаталоге под каталогом, содержащим файл Docker.
  2. Вам придется либо создать слой, либо только контейнер, либо скопировать файл ADD, чтобы автоматически распаковать его. Both approaches have their drawbacks.
+1

Я хотел бы предложить 'ADD', как это будет также извлеките файл (следовательно, избегая одного «RUN» и его двух команд). – Auzias

+0

Я упомянул ADD, но рекомендации Dockerfile рекомендуют против этого. Дополнительную информацию см. В ссылке в моем ответе. – kojiro

1

Если вы нормально имея файл в том же каталоге (или подкаталогов) вашего Dockerfile, вы можете использовать COPY.

ADD будет распаковать его для вас одновременно, удаляя ненужные unzip и rm.

Теперь, если вы хотите поделиться serf.zip файл между проектами, ссылки не будет делать, вы должны связать смонтировать его на хосте перед запуском docker build:

sudo mount --bind /path/to/serf.zip_folder /path/to/Dockefile_folder 
Смежные вопросы