Docker:从构建上下文外部将 rsa 密钥添加到映像

Thr*_*ood 5 rsa docker dockerfile

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

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

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

我想一种可能的方法是 gitignore 构建存储库中的密钥,并在每次克隆它时将其放入,并在自述文件中记下它,以便其他开发人员也知道这样做。

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

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

我(在某处)创建一个 linux 用户并为其生成一个密钥。然后在gitlab上创建一个只有repo克隆权限的用户。我将 linux 用户的公钥添加到 gitlab 用户。然后,对于构建,我创建 .ssh 文件夹并使用配置文件复制用户私钥。我只是将该用户密钥存储在 docker 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
Run Code Online (Sandbox Code Playgroud)

ssh 配置文件:

Host gitlab-app
  HostName gitlab_host
  IdentityFile /root/.ssh/id_rsa_app
  IdentitiesOnly yes
Run Code Online (Sandbox Code Playgroud)

现在 git 克隆可以在构建内部工作。

lar*_*sks 5

使用构建参数怎么样?在你的 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; \
    } || :
Run Code Online (Sandbox Code Playgroud)

然后,当您构建映像时,使用以下--build-arg选项:

docker build -t sshtest --build-arg rsakey="$(cat /path/to/id_rsa)" .
Run Code Online (Sandbox Code Playgroud)

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