如何将dir从远程主机复制到docker映像

我正在试图build立一个docker图像,我有dockerfile所有必要的命令。 但在我的构build步骤中,我需要将一个目录从远程主机复制到Docker镜像。 但是,如果我把scp命令放入dockerfile,我将不得不提供密码到dockerfile,我不必。

任何人有更好的解决scheme来做到这一点。 任何build议,将不胜感激。

我会说,至less有处理这个问题的select:

选项1:如果你可以在运行docker build之前执行scp ,这可能是最简单的select:

  1. 运行scp -r somewhere:remote_dir ./local_dir
  2. COPY ./local_dir some_path添加到您的Dockerfile
  3. 运行docker build

选项2:如果你必须在构build过程中执行scp

  1. 在构build之前启动一些诸如etcd的键值存储
  2. 在键值存储区中临时放置一个正确的SSH密钥(它不能被密码保护)
  3. 在一个单一的RUN命令(为了避免在图像中留下秘密):
    • 从键值存储中检索SSH密钥;
    • 把它放在~/.ssh/id_rsa或者启动一个ssh-agent并添加它;
    • scp检索目录
    • 删除SSH密钥
  4. 从键值存储中删除键

第二个选项有点复杂,所以可能值得创build一个包装脚本来检索所需的秘密,运行任何命令,并删除秘密。