结果不同COPY和ADD DockerFile

时间:2019-04-20 21:45:14

标签: docker filesystems

泊坞窗文件中的COPY指令出现问题。 使用COPY将私钥和公用密钥复制到〜/ .ssh /时,文件已复制,但是在尝试SSH时似乎未使用密钥,并且需要密码

但是,当我使用指令ADD时,文件也在那里,但是这次ssh无需询问密码即可工作。

使用COPY或ADD时,在文件结果方面的行为是否有所不同?

先谢谢您

我在docker中运行OpenMPI,并在容器之间设置ssh。 使用ADD时效果很好,但使用COPY时效果不佳。

1 个答案:

答案 0 :(得分:1)

ADDCOPY之间只有两个区别:

  1. 您可以将URL用作ADD的源参数,然后Docker会获取它。如果您尝试给COPY一个URL,它将尝试将其解析为相对路径。
  2. 如果添加tar文件(可选压缩),则ADD会将其解压缩到目标位置;如果您复制tar文件,则COPY会将其未修改地放入图像中。

You should generally prefer COPY超过ADD,除非您明确希望这些行为。如果文件没有URL格式的文件名也不是tar文件,则COPY和ADD相同。

COPY与ADD不太可能引起此问题。 ssh对文件所有权和权限有特别严格的要求。 Docker被证明可以复制用户0所拥有的文件,我认为它保留了原始文件的权限。这些可能与ssh要求不符。

在将ssh密钥之类的秘密复制到图像中时,您应该特别小心(我的意思是,永远不要这样做)。拥有映像的任何人都可以轻而易举地提取出密钥,这时他们可以自由地将其SSH到您的系统中。您不希望这种情况发生。