【问题标题】:how to copy dir from remote host to docker image如何将目录从远程主机复制到docker镜像
【发布时间】:2016-11-08 21:54:34
【问题描述】:

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

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

【问题讨论】:

    标签: docker containers dockerfile docker-image


    【解决方案1】:

    我会说至少有处理这个问题的选择:

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

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

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

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

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

    【讨论】:

    • 我将添加选项 #3。对它们进行 tar/gzip 压缩并通过 HTTP 访问它们。 ADD 可以接受一个远程目标并且会自动解压。
    • @user2105103 如果您不需要身份验证,或者如果通过或硬编码一个不可猜测的 URL,这确实会更容易。还值得注意的是,对于类似的用例,不鼓励使用 ADDdocs.docker.com/engine/userguide/eng-image/…
    【解决方案2】:

    您可以在构建后时将目录复制到(甚至正在运行的)容器中

    1. 在远程机器上:使用

      从远程主机复制到 docker 主机

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

    2. 在 docker 机器上:从 docker 主机复制到 docker 容器中

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

    当然,如果您愿意,也可以通过简单地调整 scpsourcetarget 来从 docker 机器上执行第 1 步命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-30
      • 2017-12-01
      • 2022-12-05
      • 2019-10-07
      • 2020-09-03
      • 1970-01-01
      • 2019-06-27
      • 2021-04-03
      相关资源
      最近更新 更多