将文件从主机操作系统复制到docker镜像

时间:2016-02-20 13:08:45

标签: docker

我有一个包含这样的行的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)。

现在,我不想使用该网址。相反,我的本地(主机)机器上的文件是Ubuntu-12.04。问题是,如何将文件从主机操作系统传输到docker镜像?然后,我可以将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

2 个答案:

答案 0 :(得分:5)

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 magic来自动解压缩它。 Both approaches have their drawbacks.

答案 1 :(得分:1)

如果您可以将文件放在Dockerfile的同一目录(或子目录)下,则可以使用COPY

ADD会同时为您解压缩,无需unziprm

现在,如果你想在项目之间共享serf.zip文件,链接不会,你需要在运行docker build之前将它挂载到主机上:

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