如何使用Docker的COPY / ADD指令将单个文件复制到图像

我正在尝试从构build上下文的根目录复制到泊坞窗图像中新创build的目录。

我正在使用的Dockerfile如下所示:

FROM debian:latest RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY test.txt /usr/src/app 

test.txt文件是一个简单的ASCII文本文件,如下所示:

 $ cat test.txt This is a test 

但是,当我build立这个图像,我得到一个图像,说明目的地path不是一个目录。

 $ docker build . Sending build context to Docker daemon 4.608 kB Sending build context to Docker daemon Step 0 : FROM debian:latest ---> 9a61b6b1315e Step 1 : RUN mkdir -p /usr/src/app ---> Using cache ---> 86bd44a8776e Step 2 : WORKDIR /usr/src/app ---> Using cache ---> ed6771adc681 Step 3 : ADD test.txt /usr/src/app stat /var/lib/docker/devicemapper/mnt/ee5b9b7029f2adf27d332cbb0d98d6ad9927629a7569fd2d9574cb767b23547b/rootfs/usr/src/app/test.txt: not a directory 

我已经尝试使用泊坞窗版本,基础图像和发行版与docker安装的多个组合。 我也尝试使用ADD而不是COPY,但结果是一样的。

我目前正在CentOS 7上尝试安装以下docker版本:

 Client version: 1.7.1 Client API version: 1.19 Go version (client): go1.4.2 Git commit (client): 786b29d OS/Arch (client): linux/amd64 Server version: 1.7.1 Server API version: 1.19 Go version (server): go1.4.2 Git commit (server): 786b29d OS/Arch (server): linux/amd64 

我注意到的是我可以复制一个目录,而不是一个文件。 例如,如果我在构build上下文根中创build一个“testing”目录,并将test.txt放入testing目录中,则可以成功复制该目录:

 FROM debian:latest RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY test /usr/src/app 

请注意,在上面的Dockerfile中,我复制了整个./test目录,而不仅仅是./test.txt。 这个构build成功。

Docker文档中有以下用于COPY指令的示例用例,与我正在尝试的类似:

 COPY hom?.txt /mydir/ 

任何人都可以指出我做错了什么? 我该如何去复制一个文件?

如Dockerfile文档中所述:

  • 如果<src>是任何其他types的文件,则将其与其元数据一起单独复制。 在这种情况下,如果<dest>以结尾的斜杠/结尾,则它将被视为一个目录, <src>的内容将写入<dest>/base(<src>)

  • 如果<dest>不以结尾的斜线结尾,则将其视为常规文件, <src>的内容将写入<dest>

因此,你必须写一个尾部为/ COPY test.txt /usr/src/app/ /