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

标签 docker dockerfile

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

我使用的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

但是,当我构建此镜像时,我得到一个说明目标路径不是目录的镜像。

$ 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 的发行版的多种组合。我也尝试过使用 ADD 而不是 COPY,但结果是一样的。

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

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 放在测试目录中,那么我可以成功复制该目录:

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

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

Docker documentation COPY 指令有以下示例用例,类似于我正在尝试做的事情:

COPY hom?.txt /mydir/

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

最佳答案

As stated in the Dockerfile documentation:

  • If <src> is any other kind of file, it is copied individually along with its metadata. In this case, if <dest> ends with a trailing slash /, it will be considered a directory and the contents of <src> will be written at <dest>/base(<src>).

  • If <dest> does not end with a trailing slash, it will be considered a regular file and the contents of <src> will be written at <dest>.

因此,你必须写 COPY test.txt /usr/src/app/尾随 / .

关于docker - 如何使用 Docker 的 COPY/ADD 指令将单个文件复制到镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31640660/

相关文章:

java - 在 OSGI 配置文件中使用环境变量

docker - 无法设置Docker UCP集群

spring-boot - Spring Boot Docker - 连接到本地主机 :5432 refused

docker - apt-get install apt-transport-https 在 Docker 中失败

docker - 从 EC2 AMI 创建一个 docker 镜像/容器

apache - Docker和Apache-重定向301和斜杠

docker - Pytorch错误: "received an invalid combination of arguments" in Jupyter Notebook

docker - 将 `RUN ln -sf/dev/stderr/var/log/mysql/error.log`添加到mysql dockerfile时为什么会中止?

docker - 如何查看每个Docker镜像的Dockerfile?

python - 如何在一个目录中为一个项目创建多个 docker 镜像?