用于克隆私有 git repo 的 Dockerfile

Posted

技术标签:

【中文标题】用于克隆私有 git repo 的 Dockerfile【英文标题】:Dockerfile for cloning private git repo 【发布时间】:2013-11-07 18:22:12 【问题描述】:

我正在尝试从 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,但我不确定这是否相关。

【问题讨论】:

【参考方案1】:

构建过程的输出是什么?

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

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

【讨论】:

谢谢。问题是它无法打开 tty 来询问“known_hosts”是/否。 -v 显示调试信息是一个很好的建议。 您是如何实际解决的?通过将主机添加到 Dockerfile 中的 known_hosts? 一种可能性是使用ssh-keyscan github.com >> ~/.ssh/known_hosts,是的!或者使用-o StrictHostKeyChecking=no 进行首次登录尝试(这将导致相同的结果,但将是幂等的)。 Dockerfile的构建过程我不是很了解,但是每一步都是在不同的容器中完成的吗? docker build --rm=false -t peterbecich/parkinsons . ... Step 13 : RUN eval `ssh-agent -s` ---> Using cache ---> 685501debd36 ... Step 14 : RUN ssh-add /root/.ssh/pdl_resources_for_docker ---> Running in daee32024ba9 Could not open a connection to your authentication agent. ssh-add 尝试查找位于不同容器中的代理。所以它失败了。 想通了。这似乎是人们将命令放入一个 Dockerfile RUN 行的原因:RUN eval "$(ssh-agent)" && ssh-agent -s【参考方案2】:

运行 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

【讨论】:

【参考方案3】:

(可能不符合您的需求)

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

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

优点:

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

缺点:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于用于克隆私有 git repo 的 Dockerfile的主要内容,如果未能解决你的问题,请参考以下文章

如何使用GitPython克隆存储库

ssh克隆不克隆git中的repo

使用 Chef 克隆空的 git repo

使用Visual Studio 2017克隆TFS Git repo时出错400

sh 使用特定的SSH私钥克隆git repo

从 Dockerfile 克隆私有 git 存储库