我正在尝试构建一个 docker 映像,我有包含所有必要命令的 dockerfile。但在我的构建步骤中,我需要将一个目录从远程主机复制到 docker 映像。但是,如果我将 scp 命令放入 dockerfile,我还必须在 dockerfile 中提供密码,而我不必这样做。
任何人都有更好的解决方案来做到这一点。任何建议将不胜感激。
我正在尝试构建一个 docker 映像,我有包含所有必要命令的 dockerfile。但在我的构建步骤中,我需要将一个目录从远程主机复制到 docker 映像。但是,如果我将 scp 命令放入 dockerfile,我还必须在 dockerfile 中提供密码,而我不必这样做。
任何人都有更好的解决方案来做到这一点。任何建议将不胜感激。
我想说至少有处理这个问题的选择:
选项 1:
如果您可以scp
在运行之前执行,docker build
这可能是最简单的选项:
scp -r somewhere:remote_dir ./local_dir
COPY ./local_dir some_path
到您的 Dockerfiledocker build
选项 2:如果您必须scp
在构建期间执行:
RUN
命令中(避免在图像中留下秘密):
~/.ssh/id_rsa
或启动ssh-agent
并添加它;scp
第二个选项有点复杂,因此可能值得创建一个包装脚本来检索所需的机密、运行任何命令并删除机密。
您可以在构建后将目录复制到(甚至正在运行的)容器中
在远程机器上:从远程主机复制到 docker 主机
scp -r /your/dir/ <user-at-docker-host>@<docker-host>:/some/remote/directory
在 docker 机器上:从 docker 主机复制到 docker 容器
docker cp /some/remote/directory <container-name>:/some/dir/within/docker/
当然,如果您愿意,您也可以通过简单地调整scp命令的源和目标来从您的 docker 机器上执行第 1 步。