如何使用Dockerfile将文件从主机复制到容器

时间:2015-05-26 09:46:18

标签: docker boot2docker dockerfile docker-registry

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

FROM ubuntu:12.04

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

现在我的主机中有一个名为abc.txt的文件。如何将其复制到此容器中。我可以在Dockerfile中添加从Host到Container的任何步骤。

7 个答案:

答案 0 :(得分:62)

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

official documentation

中阅读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

official documentation

中阅读有关ADD的更多详情

答案 1 :(得分:6)

对于那些遇到此错误(非常不清楚)的人:

  

复制失败: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
  • 该文件位于.dockerignore.gitignore文件忽略的目录中(请注意不要使用通配符)
  • 您打错了文字

有时WORKDIR /abcCOPY . xyz/会在COPY /abc xyz/失败的地方工作,但这有点难看。

答案 2 :(得分:2)

答案 3 :(得分:1)

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

  

COPY失败:stat   /var/lib/docker/tmp/docker-builder977188321/zeppelin-0.7.2-bin-all:no   这样的文件或目录

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

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

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

步骤3:转到包含DockFile的目录并运行命令[alternative also available] docker build

步骤4:使用日志成功创建docker镜像

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

步骤6/9:WORKDIR $ ZEPPELIN_HOME  ---> 3adacfb024d8 .... 成功建造了b67b9ea09f02

答案 4 :(得分:1)

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

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

对我来说,解决方案是使用docker build .而非docker build - < Dockerfile从Docker文件构建。

答案 5 :(得分:0)

我能够这样将文件从主机复制到dockerfile中的容器中:

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

    COPY 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

您应该看到该文件。

答案 6 :(得分:0)

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

docker build  -t <imagename:tag> -f- ./ < Dockerfile