Docker打镜像时怎么拉取git仓库

有时我们需要在Docker容器中去拉取git仓库,而这些个仓库很多时候是私有的,需要权限才能拉取。怎么做才合适呢?

我们知道git仓库一般都是支持通过SSH的方式去推送的拉取的,那把具有拉取权限的私钥加到Docker镜像里不就可以了吗?

听起来很简单,实际上要复杂一些,因为直接把私钥文件添加进镜像是不行的,因为还有其它的交互式操作。

这个时候需要一些特殊的处理方式,我们以阿里云的codeup为例,假设你已经有了可以拉取git仓库的公钥私钥,在Dockerfile中加入如下代码:

RUN --mount=type=ssh mkdir -p -m 0700 ~/.ssh && ssh-keyscan codeup.aliyun.com >> ~/.ssh/known_hosts

ADD id_rsa_codeup /root/.ssh/id_rsa
ADD id_rsa_codeup.pub /root/.ssh/id_rsa.pub

RUN chmod 600 /root/.ssh/id_rsa
RUN chmod 600 /root/.ssh/id_rsa.pub

这几条代码的作用创建主目录下的.ssh文件夹并把codeup.aliyun.com域名加入到known_hosts里,再把公私钥添加到镜像中并授予正确的权限。

这么操作完以后,不管是在打镜像过程中,还是在容器中去拉取镜像都没问题了。

最后,建议把公私钥的仓库权限设置为只读,这样能降低仓库被恶意提交代码的风险。

Leave a Comment

豫ICP备19001387号-1