Docker:如何使用SSH访问私有Github仓库?

5
我正在尝试使用Docker克隆GitHub上的私有repo。问题是我需要使用ssh来访问该仓库。我在github项目的设置中添加了一个密钥,我想这个密钥用于识别docker服务器。
我的问题是我不知道在Dockerfile中应该编写什么内容,以便服务器在尝试访问我的GitHub repo时使用该密钥。我看到一些示例将id_rsa添加到容器中,但我不知道它是否存在于他们的服务器上,并且存储在哪里。
RUN mkdir /root/.ssh/
# can't find the file id_rsa
ADD id_rsa /root/.ssh/id_rsa 
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts

run git clone git@github.com:user/repo.git

怎么从Docker服务器访问我的私有仓库?
2个回答

10
我使用ssh-add命令添加密钥成功完成了操作。
使用多个RUN指令的问题是,非持久化数据在下一个RUN时不可用。我通过以下方法成功登录并使用github私有仓库:
RUN eval `ssh-agent -s` && \
    ssh-add id_rsa && \
    git clone git@github.com:user/repo.git

通过在单个CMD中使用&&,当连接到GitHub时,eval进程仍然在运行,并且ssh-agent已经加载了密钥。
希望这可以帮到您。

就像我说的那样,我不知道id_rsa在他们的服务器上的位置,问题不在于我的电脑上构建,而是在他们的服务器上构建。 - Carl Levasseur
如果您使用 ADD 命令,路径应与 Dockerfile 文件相同。 - Marcus Hughes
4
我认为以这种方式操作会将你的id_rsa密钥包含在你的docker缓存中,直到你将它们删除。我知道OP也展示了这个步骤,但不管怎样,在docker容器中添加你的id_rsa密钥可能不是一个好主意。 - slm

5
如果您想从Dockerfile中使用git,则需要像配置自己的开发机器一样配置容器。
我无法真正理解"their server"中的"their"是什么意思,所以我只是猜测。
当您向github注册公钥时,应该也得到了私钥。那就是其他示例中看到的id_rsa
如果找不到该文件,请重新开始。删除旧密钥,生成新密钥并将其配置在github和docker构建上下文中(在您的示例中,只需将其复制到与Dockerfile相同的文件夹中)。
作为另一种策略,您可能希望在图像构建过程之外进行检出(本地克隆并将所有内容ADD到图像中)。

我之前不了解构建上下文,我以为ADD指令直接在主机上搜索文件,这也是我在Dockerfile中使用git clone的原因,但实际上是无用的,正如你所说,我只需要添加Dockerfile所在的目录即可。谢谢! - Carl Levasseur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接