Docker:将rsa键添加到构build上下文之外的映像

所以我想在我的映像中包含一个rsa密钥,以便在构build映像时将git repo克隆到我的映像中。 但我真的不想在docker build repo中保留这个键。 有没有人有如何处理这个好的build议? 从docker文档和其他各种线程看来,没有办法从构build上下文之外COPY文件。 除了以下我不感兴趣的解决scheme:

如何在Docker的构build上下文之外包含文件?

有更好的解决办法吗? 或者,我将不得不保留在生成回购的关键或build立从我想要使用的RSA密钥的位置?

我想一个可能的方法是从构build仓库中取回密钥,并在克隆时将其放入,并在自述文件中记下它,以便其他开发人员也知道这一点。

—我的解决scheme—

我不认为这有一个“正确”的答案,但这是我的解决scheme。

我创build一个Linux用户(某处)并为其生成密钥。 然后在gitlab上创build一个只有repo克隆权限的用户。 我将linux用户的公钥添加到gitlab用户。 然后为构build我创build.ssh文件夹并复制用户私钥与configuration文件。 我只是将该用户密钥存储在docker build repo中。

构build步骤:

 RUN mkdir ~/.ssh RUN touch ~/.ssh/known_hosts RUN ssh-keyscan -t rsa gitlab_host > ~/.ssh/known_hosts COPY ./ssh/config /root/.ssh COPY ./ssh/id_rsa_app /root/.ssh RUN chmod 600 /root/.ssh/id_rsa_app 

sshconfiguration文件:

 Host gitlab-app HostName gitlab_host IdentityFile /root/.ssh/id_rsa_app IdentitiesOnly yes 

现在git克隆在内部工作。

如何使用构build参数 ? 在你的Dockerfile中做这样的事情:

 ARG rsakey RUN test -n "${rsakey}" && { \ mkdir -p -m 700 /root/.ssh; \ echo "${rsakey}" > /root/.ssh/id_rsa; \ chmod 600 /root/.ssh/id_rsa; \ } || : 

然后,当你build立图像时,使用--build-arg选项:

 docker build -t sshtest --build-arg rsakey="$(cat /path/to/id_rsa)" . 

这将在构build时将密钥注入到图像中,而不要求它在您的构build上下文中生存。