Docker: adding rsa keys to image from outside of build context
所以我想在我的映像中包含一个RSA密钥,这样我可以在构建git repo时将其克隆到我的映像中。但我真的不想在Docker Build回购中保留这个密钥。有人对如何处理这个问题有好的建议吗?从Docker文档和各种其他线程来看,似乎无法从构建上下文之外访问
如何包括Docker构建上下文之外的文件?
有更好的解决办法吗?或者我需要保留构建报告中的密钥还是从我要使用的RSA密钥的位置构建?
我想一种可能的方法是GitIgnore构建repo中的密钥,并在每次克隆时都将其放入,然后在自述文件中对其进行记录,以便其他开发人员也知道这样做。
---我的解决方案---
我不认为有一个"正确"的答案,但这里是我的解决方案。
我创建了一个Linux用户(在某个地方),并为它生成了一个密钥。然后在Gitlab上创建一个只有repo克隆权限的用户。我将Linux用户的公钥添加到gitlab用户。然后,对于构建,我创建.ssh文件夹,并使用配置文件在用户私钥中进行复制。我只是将用户密钥存储在docker build repo中。
建立步骤:
1 2 3 4 5 6 | 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 |
ssh配置文件:
1 2 3 4 | Host gitlab-app HostName gitlab_host IdentityFile /root/.ssh/id_rsa_app IdentitiesOnly yes |
现在Git克隆在构建内部工作。
使用构建参数怎么样?在你的dockerfile中做类似的事情:
1 2 3 4 5 6 | ARG rsakey RUN test -n"${rsakey}" && { \ mkdir -p -m 700 /root/.ssh; \ echo"${rsakey}"> /root/.ssh/id_rsa; \ chmod 600 /root/.ssh/id_rsa; \ } || : |
然后,在构建图像时,使用
1 | docker build -t sshtest --build-arg rsakey="$(cat /path/to/id_rsa)" . |
这将在构建时将密钥注入到映像中,而不要求它活在构建上下文中。