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上下文中生存。