我正在尝试构建一个 docker 镜像,我有包含所有必要命令的 dockerfile。但在我的构建步骤中,我需要将一个目录从远程主机复制到 docker 镜像。但是,如果我将 scp 命令放入 dockerfile,我还必须在 dockerfile 中提供密码,而我不必这样做。
任何人都有更好的解决方案来做到这一点。任何建议将不胜感激。
最佳答案
我想说至少有处理这个问题的选择:
选项 1:
如果您可以在运行 docker build
之前执行 scp
,这可能是最简单的选择:
- 运行
scp -r somewhere:remote_dir ./local_dir
- 将
COPY ./local_dir some_path
添加到您的 Dockerfile - 运行
docker build
选项 2:如果您必须在构建期间执行 scp
:
- 开始一些键值存储,例如 etcd构建前
- 在键值存储中临时放置一个正确的 SSH key (不能用密码保护)
- 在单个
RUN
命令中(避免在图像中留下 secret ):- 从键值存储中检索 SSH key ;
- 将其放入
~/.ssh/id_rsa
或启动一个ssh-agent
并添加; - 使用
scp
获取目录 - 删除 SSH key
- 从键值存储中删除键
第二个选项有点复杂,因此可能值得创建一个包装器脚本来检索所需的 secret 、运行任何命令并删除 secret 。
关于docker - 如何将目录从远程主机复制到docker镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38230915/