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

时间:2016-07-06 18:11:02

标签: docker containers dockerfile docker-image

我正在尝试构建一个docker镜像,我有所有必要命令的dockerfile。但在我的构建步骤中,我需要将一个目录从远程主机复制到docker镜像。但是如果我把scp命令放到dockerfile中,我也必须在dockerfile中提供密码,我不需要这样做。

任何人都有更好的解决方案来做到这一点。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:3)

我说至少有处理这个问题的方法:

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

  1. 运行scp -r somewhere:remote_dir ./local_dir
  2. COPY ./local_dir some_path添加到Dockerfile
  3. 运行docker build
  4. 选项2:如果您必须在构建期间执行scp

    1. 在构建
    2. 之前启动一些键值存储,例如etcd
    3. 在键值存储
    4. 中临时放置正确的SSH密钥(不能受密码保护)
    5. 在单个RUN命令中(以避免在图像中留下秘密):
      • 从键值存储中检索SSH密钥;
      • 将其放入~/.ssh/id_rsa或开始ssh-agent并添加;
      • 使用scp
      • 检索目录
      • 删除SSH密钥
    6. 从键值存储中删除密钥
    7. 第二个选项有点复杂,所以可能值得创建一个包装脚本来检索所需的秘密,运行任何命令,并删除秘密。

答案 1 :(得分:0)

您可以在发布时间

将目录复制到(甚至正在运行的)容器中
  1. 在远程计算机上:使用

    从远程主机复制到docker主机

    scp -r /your/dir/ <user-at-docker-host>@<docker-host>:/some/remote/directory

  2. 在泊坞机上:从泊坞主机复制到泊坞窗容器

    docker cp /some/remote/directory <container-name>:/some/dir/within/docker/

  3. 当然,如果您只是通过简单地调整 scp 目标,您也可以从您的docker机器执行第1步命令。