99

我写了一个看起来像这样的 Dockerfile

FROM ubuntu:12.04

RUN apt-get update
RUN apt-get install -y wget

现在我abc.txt在我的主机中调用了一个文件。我怎样才能将它复制到这个容器。我可以在 Dockerfile 中添加从主机复制到容器的任何步骤吗?

4

7 回答 7

141

像这样使用 COPY 命令:

COPY foo.txt /data/foo.txt
# where foo.txt is the relative path on host
# and /data/foo.txt is the absolute path in the image

在官方文档中阅读有关 COPY 的更多详细信息

另一种方法是使用 ADD,但如果您不想使用 ADD 的一些高级功能(例如解压缩 tar.gz 文件),这不是最佳做法。如果您仍想使用 ADD 命令,请这样做:

ADD abc.txt /data/abc.txt
# where abc.txt is the relative path on host
# and /data/abc.txt is the absolute path in the image

在官方文档中阅读有关 ADD 的更多详细信息

于 2015-05-29T09:34:25.380 回答
45

对于那些得到这个(非常不清楚)错误的人:

复制失败:stat /var/lib/docker/tmp/docker-builderXXXXXXX/abc.txt:没有这样的文件或目录

可能有很多原因,包括:

  • 对于 docker-compose 用户,请记住 docker-compose.yml 会context覆盖 Dockerfile 的上下文。您的 COPY 语句现在需要导航相对于 docker-compose.yml 中定义的路径,而不是相对于您的 Dockerfile。
  • COPY 行的尾随注释或分号:COPY abc.txt /app #This won't work
  • 该文件位于被.dockerignoreor.gitignore文件忽略的目录中(注意通配符)
  • 你打错了

有时WORKDIR /abc后面是失败的COPY . xyz/作品COPY /abc xyz/,但这有点难看。

于 2018-10-24T08:03:46.987 回答
7

我遇到了这个问题,我无法将 zeppelin [1GB] 目录复制到 docker 容器中并且遇到了问题

复制失败:stat /var/lib/docker/tmp/docker-builder977188321/zeppelin-0.7.2-bin-all:没有这样的文件或目录

我正在使用 docker Version: 17.09.0-ce 并通过以下步骤解决了该问题。

第1步:复制zeppelin目录[我想复制到docker包中]到包含“Dockfile”的目录中

第 2 步:编辑 Dockfile 并添加命令 [我们要复制的位置] ADD ./zeppelin-0.7.2-bin-all /usr/local/

第 3 步:转到包含 DockFile 的目录并运行命令 [也可用替代方法]docker build

第 4 步:使用日志成功创建 docker 映像

步骤 5/9:添加 ./zeppelin-0.7.2-bin-all /usr/local/ ---> 3691c902d9fe

第 6/9 步:WORKDIR $ZEPPELIN_HOME ---> 3adacfb024d8 .... 成功构建 b67b9ea09f02

于 2017-12-07T12:55:06.237 回答
4

在 CentOS 7 上使用 Docker 19.03.8 时出现以下错误:

COPY failed: stat /var/lib/docker/tmp/docker-builderXXXXXXX/abc.txt: no such file or directory

我的解决方案是从 Docker 文件构建,docker build .而不是docker build - < Dockerfile.

于 2020-06-16T09:24:21.070 回答
2

您可以使用 ADD 命令https://docs.docker.com/engine/reference/builder/#/add或 COPY 命令https://docs.docker.com/engine/reference/builder/#/copy

于 2015-05-26T11:02:28.927 回答
2

我能够将文件从主机复制到 dockerfile 中的容器,如下所示:

  1. 在我的 c 驱动程序上创建了一个文件夹 --> c:\docker
  2. 在同一文件夹中创建一个测试文件 --> c:\docker\test.txt
  3. 在同一文件夹中创建一个 docker 文件 --> c:\docker\dockerfile
  4. docker文件内容如下,从本地主机拷贝一个文件到容器根目录:FROM ubuntu:16.04

    复制 test.txt /

  5. 从 docker hub 拉取 ubuntu 的副本 --> docker pull ubuntu:16.04
  6. 从 dockerfile 构建映像 --> docker build -t myubuntu c:\docker\
  7. 从你的新镜像 myubuntu --> docker run -d -it --name myubuntucontainer myubuntu "/sbin/init" 构建容器
  8. 连接新创建的容器 -->docker exec -it myubuntucontainer bash
  9. 检查 text.txt 文件是否在根目录 --> ls

您应该看到该文件。

于 2020-06-10T16:01:59.147 回答
0

如果要复制当前目录的内容,可以运行:

docker build  -t <imagename:tag> -f- ./ < Dockerfile
于 2020-06-25T06:00:50.407 回答