【问题标题】:Git clone repo in DockerfileDockerfile 中的 Git 克隆仓库
【发布时间】:2015-06-12 16:28:15
【问题描述】:

我在从 Dockerfile 构建映像时尝试克隆存储库。我正在使用sequenceiq/docker-spark Dockerfile 并将其扩展如下(在ENTRYPOINT 行之前):

RUN yum install -y git
RUN git clone git@github.com:myorg/myrepo.git

几分钟后我收到以下错误:

Initialized empty Git repository in /myrepo/.git/
fatal: The remote end hung up unexpectedly
INFO[0128] The command [/bin/sh -c git clone git@github.com:myorg/myrepo.git] returned a non-zero code: 128

我已将图像的 id_rsa.pub 添加到该存储库的部署密钥中。我尝试在图像上运行bash 并尝试在相同的问题上运行git clone-ing。我难住了。我发现了这个相关问题here,但我的 ssh 密钥没有密码,所以没有帮助。

【问题讨论】:

    标签: git github ssh docker


    【解决方案1】:

    我已将图像的 id_rsa.pub 添加到该存储库的部署密钥中。

    如果您尝试使用 ssh 密钥对 GitHub 进行身份验证,则需要在构建过程中使相应的私钥在容器内可用(例如,通过使用 COPY 指令将其复制到容器中) .

    对于公共存储库,最简单的解决方案是使用存储库的https:// URL,而不是通过 ssh 访问它。

    对于私有存储库,使用https:// URL 可能是最简单的,然后通过 git 凭据机制 (http://git-scm.com/docs/git-credential-store) 安排提供凭据。

    【讨论】:

    • 基础镜像生成一个无密码的私钥公钥对。我将映像中的公钥添加到存储库的部署密钥中,因此相应的私钥在/root/.ssh/id_rsa 中可用。此外,如果我添加公钥,我会得到同样的错误。
    【解决方案2】:

    我认为 Git 可能正在尝试根据 known_hosts 检查服务器。尝试将-o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 传递给 SSH。

    another question 对如何将这些值传递给 Git 提供了很好的答案。基本上,您要么需要运行 Git >2.3,要么制作一个小 shell 脚本,以您想要的方式调用 SSH 并将 Git 指向那个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 2016-04-27
      相关资源
      最近更新 更多