20

我正在尝试从 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 和这个 key 就很好,所以我似乎在 docker 中遗漏了一些东西。

我可能缺少的另一件事是docker~$HOME内部都指向/而不是/root,但我不确定这是否相关。

4

4 回答 4

23

构建过程的输出是什么?

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

如果还是不行,试试RUN ssh -v git@github.com(加key后);输出应该解释正在发生的事情。

于 2013-10-28T21:57:42.097 回答
16

运行 ssh-keyscan github.com >> ~/.ssh/known_hosts

keyscan 工作得很好,因为它接受了主机。以下完整答案有效:

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

^ 调试流程的好方法。这就是我意识到我需要 keyscan >> known_hosts

于 2014-11-19T05:00:39.500 回答
2

(可能不符合您的需求)

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

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

优点:

  • 非常简单的方法
  • 令牌很容易被撤销

缺点:

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

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

于 2016-12-21T13:55:01.920 回答
1

下面的方法是使用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

于 2019-12-24T11:00:50.897 回答