当前位置: 首页 > 知识库问答 >
问题:

使用dockerfile克隆私有git回购

侯焱
2023-03-14

我已经复制了这个代码,似乎是各种工作dockerfile周围,这里是我的:

FROM ubuntu

MAINTAINER Luke Crooks "luke@pumalo.org"

# Update aptitude with new repo
RUN apt-get update

# Install software 
RUN apt-get install -y git python-virtualenv

# Make ssh dir
RUN mkdir /root/.ssh/

# Copy over private key, and set permissions
ADD id_rsa /root/.ssh/id_rsa
RUN chmod 700 /root/.ssh/id_rsa
RUN chown -R root:root /root/.ssh

# Create known_hosts
RUN touch /root/.ssh/known_hosts

# Remove host checking
RUN echo "Host bitbucket.org\n\tStrictHostKeyChecking no\n" >> /root/.ssh/config

# Clone the conf files into the docker container
RUN git clone git@bitbucket.org:Pumalo/docker-conf.git /home/docker-conf

这给了我错误

Step 10 : RUN git clone git@bitbucket.org:Pumalo/docker-conf.git /home/docker-conf
 ---> Running in 0d244d812a54
Cloning into '/home/docker-conf'...
Warning: Permanently added 'bitbucket.org,131.103.20.167' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
2014/04/30 16:07:28 The command [/bin/sh -c git clone git@bitbucket.org:Pumalo/docker-conf.git /home/docker-conf] returned a non-zero code: 128

这是我第一次使用dockerfile,但是从我所读到的(以及从工作配置中获取的),我不明白为什么这不起作用。

我的id_rsa和我的dockerfile在同一个文件夹中,是我的本地密钥的副本,可以克隆这个回购没有问题。

编辑:

在我的dockerfile中,我可以添加:

RUN cat /root/.ssh/id_rsa

它打印出正确的密钥,所以我知道它被正确地复制了。

我也试着按照诺亚的建议去做:

RUN echo "Host bitbucket.org\n\tIdentityFile /root/.ssh/id_rsa\n\tStrictHostKeyChecking no" >> /etc/ssh/ssh_config

可悲的是,这也行不通。

共有3个答案

南宫龙野
2023-03-14

没有必要摆弄ssh配置。使用包含环境变量的配置文件(不是Dockerfile),并在运行时使用外壳脚本更新docker文件。您将令牌保留在Dockerfile之外,并且可以克隆https(无需生成或传递ssh密钥)。

转到“设置”

  • 生成启用了回购范围的个人访问令牌。
  • 像这样克隆:git clone https://MY_TOKEN@github.com /user-or-org/repo

一些评论指出,如果您使用共享Dockerfile,这可能会将您的访问密钥暴露给项目中的其他人。虽然这可能与您的特定用例有关,也可能与您的特定用例无关,但以下是一些您可以处理的方法:

  • 使用shell脚本接受可能包含键作为变量的参数。将Dockerfile中的变量替换为sed或类似变量,即使用sh rundocker调用脚本。sh MYTOKEN=foo将在http://{{MY_TOKEN}}@github上替换。com/user或org/repo。请注意,您也可以使用配置文件(使用.yml或任何您想要的格式)执行相同的操作,但使用环境变量
步衡
2023-03-14

您应该为Docker映像创建新的SSH密钥集,因为您可能不想在其中嵌入您自己的私钥。要使其工作,您必须将该密钥添加到git存储库中的部署密钥中。以下是完整的配方:

>

  • 使用ssh-keygen-q-t rsa-N"-f repo-key生成ssh key,这将为您提供repo-key和repo-key.pub文件

    添加回购密钥。发布到存储库部署密钥
    在GitHub上,转到[您的存储库]-

    在Dockerfile中添加如下内容:

    ADD repo-key /
    RUN \
      chmod 600 /repo-key && \  
      echo "IdentityFile /repo-key" >> /etc/ssh/ssh_config && \  
      echo -e "StrictHostKeyChecking no" >> /etc/ssh/ssh_config && \  
      // your git clone commands here...
    

    请注意,上面关闭了StrichostKeyChecking,所以您不需要。ssh/U已知主机。尽管我可能更喜欢上面答案之一中使用ssh密钥扫描的解决方案。

  • 韩安顺
    2023-03-14

    我的密钥受到密码保护,导致了这个问题,下面列出了一个工作文件(为未来谷歌人的帮助)

    FROM ubuntu
    
    MAINTAINER Luke Crooks "luke@pumalo.org"
    
    # Update aptitude with new repo
    RUN apt-get update
    
    # Install software 
    RUN apt-get install -y git
    # Make ssh dir
    RUN mkdir /root/.ssh/
    
    # Copy over private key, and set permissions
    # Warning! Anyone who gets their hands on this image will be able
    # to retrieve this private key file from the corresponding image layer
    ADD id_rsa /root/.ssh/id_rsa
    
    # Create known_hosts
    RUN touch /root/.ssh/known_hosts
    # Add bitbuckets key
    RUN ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts
    
    # Clone the conf files into the docker container
    RUN git clone git@bitbucket.org:User/repo.git
    
     类似资料:
    • 我一直在编写bash脚本来使用SSH克隆私有Github存储库。需要遵循步骤- 使用SSH-keygen-t rsa-b 4096-C“您的电子邮件”生成SSH密钥 如何在bash脚本中自动化步骤3。任何帮助都将不胜感激。

    • 我有一个Dockerfile文件,试图将一个web应用程序打包并部署到一个容器中。在Docker映像构建期间,app的代码从git存储库中获取。以下是Dockerfile快照: 我希望 docker 不要缓存 RUN git 克隆的步骤 -- 以便存储库上正在进行的更新可以反映在 Docker 映像构建中。有可能做到这一点吗?

    • 到现在为止,读者已经零略到Git的灵活性以及健壮性。Git可以通过重置随意撤销提交,可以通过变基操作更改历史,可以随意重组提交,还可以通过reflog的记录纠正错误的操作。但是再健壮的版本库设计,也抵挡不了存储介质的崩溃。还有一点就是不要忘了Git版本库是躲在工作区根目录下的.git目录中,如果忘了这一点直接删除工作区,就会把版本库也同时删掉,悲剧就此发生。 “不要把鸡蛋装在一个篮子里”,是颠扑不

    • 问题内容: 我已经从似乎各种各样的工作dockerfile中复制了此代码,这是我的: 这给我错误 这是我第一次使用dockerfiles,但是从我阅读的内容(以及从有效的配置中获取)来看,我不明白为什么它不起作用。 我的id_rsa与我的dockerfile位于同一文件夹中,并且是我的本地密钥的副本,可以克隆此存储库。 编辑: 在我的dockerfile中,我可以添加: 并且它会打印出正确的密钥,

    • 在本文章教程中,我们将演示如何使用 命令。 注意:在开始学习本教程之前,先创建一个存储库,有关如何创建存储库,请参考: http://www.yiibai.com/git/git_create_repository.html 进入一个即将用于存放存储库的目录,作为一个演示,这里使用的目录是:D:\worksp,在此目录中,点击右键,在弹出的菜单中选择:Git Bash,如下图所示 - 弹出一个 G

    • 本文向大家介绍Git 递归克隆,包括了Git 递归克隆的使用技巧和注意事项,需要的朋友参考一下 示例 1.6.5 克隆存储库,还克隆所有子模块。如果子模块本身包含其他子模块,则Git还将克隆那些子模块。