Docker:从构建上下文外部向映像添加rsa键

Docker: adding rsa keys to image from outside of build context

所以我想在我的映像中包含一个RSA密钥,这样我可以在构建git repo时将其克隆到我的映像中。但我真的不想在Docker Build回购中保留这个密钥。有人对如何处理这个问题有好的建议吗?从Docker文档和各种其他线程来看,似乎无法从构建上下文之外访问COPY文件。除了以下我不感兴趣的解决方案外:

如何包括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; \
    } || :

然后,在构建图像时,使用--build-arg选项:

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

这将在构建时将密钥注入到映像中,而不要求它活在构建上下文中。