【问题标题】:Dockerfile for cloning private git repo用于克隆私有 git repo 的 Dockerfile
【发布时间】: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,但我不确定这是否相关。

【问题讨论】:

    标签: ssh docker


    【解决方案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://stackoverflow.com/a/29464430/990356

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

      优点:

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

      缺点:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2021-07-16
          • 1970-01-01
          • 2021-02-04
          • 1970-01-01
          • 2013-08-07
          • 1970-01-01
          • 2022-11-02
          • 1970-01-01
          相关资源
          最近更新 更多