不同的结果复制和添加DockerFile



我对docker文件中的指令COPY有问题。 当使用COPY将私钥和公钥复制到~/.ssh/时,文件被复制,但是当尝试SSH时,密钥似乎没有被使用,并且需要密码

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

使用 COPY 或 ADD 时,文件结果的行为是否有差异?

提前谢谢你,

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

ADD 和 COPY 之间只有两个区别:

  1. 你可以使用 URL 作为 ADD 的源参数,Docker 会获取它;如果你尝试给 COPY 一个 URL,它会尝试将其解析为相对路径。
  2. 如果你添加一个tar文件,可以选择压缩,
  3. ADD会把它解压缩到目标;如果你复制一个tar文件,COPY会把它放在图像中,不加修改。

通常,除非明确需要这些行为,否则通常应首选 COPY 而不是 ADD。 如果文件没有 URL 格式的文件名并且不是 tar 文件,则 COPY 和 ADD 是相同的。

复制与添加不太可能导致此问题。 SSH 对文件所有权和权限有特别严格的要求。 Docker 被记录为复制用户 0 拥有的文件,我认为它保留了原始文件的权限。 这些可能与 ssh 的要求不匹配。

将 ssh 密钥等机密复制到图像中时,您应该特别小心(我的意思是,永远不要这样做)。 任何拥有映像的人都可以简单地将密钥提取回来,此时他们可以自由地 ssh 进入您的系统。 你不希望这种情况发生。

最新更新