用于克隆私有 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的主要内容,如果未能解决你的问题,请参考以下文章