用于克隆私有git仓库的Dockerfile

时间:2013-10-28 19:57:58

标签: ssh docker

我正在尝试从github克隆私有git存储库。我做了一个像这样的Dockerfile:

FROM ubuntu:12.04

RUN apt-get update
RUN apt-get install -y git
RUN mkdir -p /root/.ssh/
ADD ./id_rsa /root/.ssh/id_rsa
RUN git clone git@github.com:usr/repo.git

我在本地使用这个repo就好了,所以看起来我在Docker里面缺少一些东西。

我可能遗漏的另一件事是,泊坞内的~$HOME指向/而不是/root,但我不确定是否可以相关。

4 个答案:

答案 0 :(得分:20)

构建过程的输出是什么?

随机猜测:尝试chmod 600私钥。

如果仍然无效,请尝试RUN ssh -v git@github.com(添加密钥后);输出应该解释发生了什么。

答案 1 :(得分:14)

RUN ssh-keyscan github.com>>的〜/ .ssh / known_hosts中

键盘可以很好地工作,因为它接受主机。以下完整答案有效:

RUN mkdir -p /root/.ssh
RUN cp /var/my-app/id_rsa /root/.ssh/id_rsa
RUN chmod 600 /root/.ssh/id_rsa
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts

同样如上所述:

RUN ssh -v git@github.com

^调试流程的好方法。这就是我如何意识到我需要密钥扫描>>的known_hosts

答案 2 :(得分:2)

(可能不符合您的需求)

还有另一种方法:https://stackoverflow.com/a/29464430/990356

转到Settings > Personal access tokens并生成启用了repo范围的个人访问令牌。 现在你可以做git clone https://MY_TOKEN@github.com/user-or-org/repo

优点:

  • 非常简单的方法
  • 令牌可以轻松撤销

缺点:

  • 如果有人有权访问Dockerfile,则他可以访问令牌

要解决此问题,您可以使用环境变量来存储令牌

答案 3 :(得分:0)

下面的方法是将httpsPersonal Access Token一起使用,它的工作原理就像是魅力。

ARG git_personal_token
RUN git config --global url."https://${git_personal_token}:@github.com/".insteadOf "https://github.com/"
RUN git clone https://github.com/your/project.git /project

然后,提供如下所示的docker参数。

docker build --build-arg git_personal_token={your_token} .

基本思想来自https://medium.com/paperchain/fetching-private-github-repos-from-a-docker-container-273f25ec5a74