【问题标题】:Copy directory to another directory using ADD command使用 ADD 命令将目录复制到另一个目录
【发布时间】:2014-12-17 17:58:42
【问题描述】:

我已经阅读了http://docs.docker.com/engine/reference/builder/#add,但是我遇到了一个问题。我想将本地目录go复制到docker /user/local/

我试过了:

ADD go /usr/local/

和:

ADD /go/ /usr/local/ 

还有:

RUN chmod 0755 /usr/local/go/src/make.bash

但是,我看到以下错误消息:

/usr/local/go/src/make.bash: No such file or directory

但是本地的go 目录确实包含make.bash

【问题讨论】:

    标签: docker


    【解决方案1】:

    确实 ADD go /usr/local/ 将添加 contentgo 文件夹而不是文件夹本身,您可以使用 Thomasleveil 解决方案,或者如果由于某种原因不起作用,您可以将 WORKDIR 更改为 @ 987654324@ 然后将您的目录添加到其中:

    WORKDIR /usr/local/
    COPY go go/
    

    WORKDIR /usr/local/go
    COPY go ./
    

    但是,如果您想添加 多个 文件夹,那么添加它们会很烦人,我从当前问题中看到的目前唯一的解决方案是使用 COPY . . 并排除所有.dockerignore 中不需要的目录和文件,假设我有文件夹和文件:

    - src 
    - tmp 
    - dist 
    - assets 
    - go 
    - justforfun 
    - node_modules 
    - scripts 
    - .dockerignore 
    - Dockerfile 
    - headache.lock 
    - package.json 
    

    我想添加src assets package.json justforfun go 所以:

    在 Dockerfile 中:

    FROM galaxy:latest
    
    WORKDIR /usr/local/
    COPY . .
    

    在 .dockerignore 文件中:

    node_modules
    headache.lock
    tmp
    dist
    

    或者为了更有趣(或者你想迷惑更多的人让他们也受苦:P)可以:

    *
    !src 
    !assets 
    !go 
    !justforfun 
    !scripts 
    !package.json 
    

    这样你就忽略了一切,但排除了你想复制或只从“忽略列表”中添加的内容。

    这是一个较晚的答案,但添加了更多方法来覆盖更多案例。

    【讨论】:

      【解决方案2】:

      您可以使用复制。您需要明确指定目录。它不会自己创建

      COPY go /usr/local/go
      

      参考:Docker CP reference

      【讨论】:

        【解决方案3】:
        ADD go /usr/local/
        

        将把本地go目录的内容复制到你的docker镜像的/usr/local/目录中。

        要在/usr/local/ 中复制go 目录本身,请使用:

        ADD go /usr/local/go
        

        COPY go /usr/local/go
        

        【讨论】:

        • 我正在尝试使用 ADD 的多源版本,因此我无法指定目标的目标目录名称。有没有办法以多 src 格式执行 OP 的要求(即不为每个源目录创建 ADD 层)?
        • 我只想添加一个旁注,说$HOME~ 或任何其他shell 变量都不起作用。我这么说是因为我花了很多钱试图弄清楚这一点,尽管这对大多数人来说是显而易见的。
        • COPY go /usr/local/go 对我不起作用。不复制。
        • 这确实是一件相当令人困惑的事情。为什么COPY 不能表现得像cp?相反,它的运作方式需要额外的警察。
        • .dockerignore 文件可以隐藏目录,COPY 或 ADD 对列出的项目不起作用
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-18
        • 2012-01-22
        • 2013-10-24
        • 2013-01-11
        • 1970-01-01
        • 2012-09-13
        • 1970-01-01
        相关资源
        最近更新 更多