2016-02-20 21 views
2

我有一個包含這樣複製從主機操作系統文件,以泊塢窗圖像

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。問題是,如何將文件從主機操作系統傳輸到泊塢窗圖像?然後,我可以將Dockerfile更改爲

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. 該文件必須在構建上下文。通常,這意味着它位於包含Dockerfile的目錄下的目錄或子目錄中。
  2. 您將不得不創建一個圖層來容納新複製的文件,或使用ADD魔法來自動解壓縮它。 Both approaches have their drawbacks.
+1

我建議'ADD'因爲它會也提取文件(因此避免一個'RUN'及其兩個命令)。 – Auzias

+0

我確實提到了ADD,但Dockerfile最佳實踐建議不要這樣做。有關更多詳細信息,請參閱我答案中的鏈接。 – kojiro

1

如果你確定有你的Dockerfile的同一目錄(或子目錄)下的文件,你可以使用COPY

ADD將在同一時間爲您解壓縮,無需unziprm

現在,如果你想分享項目之間的serf.zip文件,鏈接不會做,你需要綁定運行docker build之前將其安裝在主機上:

sudo mount --bind /path/to/serf.zip_folder /path/to/Dockefile_folder