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

时间:2017-09-15 12:50:31

标签: docker rsa dockerfile

所以我想在我的图像中包含一个rsa键,这样我就可以在构建时将git repo克隆到我的图像中。但我真的不想在docker build repo中保留这个键。有没有人对如何处理这个有一个很好的建议?从docker文档和各种其他线程看来,似乎无法从构建上下文之外的COPY文件。除了以下我不感兴趣使用的解决方案:

How to include files outside of Docker's build context?

有更好的解决方案吗?或者我是否必须将密钥保留在构建仓库中,或者从我想要使用的rsa密钥的位置构建?

我想可能的方法是从构建存储库中获取密钥,只要我克隆它就把它放进去,并在自述文件中记下它,以便其他开发人员也知道这样做。

---我的解决方案---

我认为没有“正确”的答案,但这是我采用的解决方案。

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

构建步骤:

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配置文件:

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

现在git clone在构建内部工作。

1 个答案:

答案 0 :(得分:3)

使用build argument怎么样?在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-arg选项:

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

这会在构建时将密钥注入到映像中,而不需要它存在于构建上下文中。