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

How to use Docker's COPY/ADD instructions to copy a single file to an image

我正在尝试将单个文件从构建上下文的根目录复制到Docker映像中新创建的目录中。

我使用的dockerfile如下:

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

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

1
2
$ cat test.txt
This is a test

但是,当我构建这个映像时,会得到一个声明目标路径不是目录的映像。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ 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版本、基本图像和安装了Docker的发行版的组合。我还尝试使用添加而不是复制,但结果是相同的。

我目前正在安装以下Docker版本的CentOS 7上尝试此操作:

1
2
3
4
5
6
7
8
9
10
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

我注意到我可以复制一个目录,但不能复制一个文件。例如,如果我在构建上下文根目录中创建了一个"test"目录,并将test.txt放在测试目录中,那么我可以成功地复制该目录:

1
2
3
4
FROM debian:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY test /usr/src/app

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

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

1
COPY hom?.txt /mydir/

有人能指出我做错了什么吗?如何复制单个文件?


(P)As stated in the dockerfile documentation:(p)布尔奇1(P)Thus,you have to write EDOCX1 penal 0 with a trailing EDOCX1.(p)


(P)对我来说,我是根据EDOCX1的英文字母2添加了一个适当的方法。(p)(P)档案结构(p)字母名称(P)而且在EDOCX1中,我是运行的EDOCX1(p)(P)Instead of EDOCX1 theocx1 theocx1 theocx1 English 6 I needed to run EDOCX1(p)