如何用dockerfile克隆私有gitrepo?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (3)
  • 关注 (0)
  • 查看 (645)

下面是我的代码:

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

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

我的身份证[医]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

可惜这也没用。

提问于
用户回答回答于

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

设置>个人访问令牌

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

一些评论者已经注意到,如果您使用共享Dockerfile,这可能会将您的访问密钥暴露给项目中的其他人。虽然这可能是或可能不是您的特定用例所关心的问题,但以下是您可以处理的一些方法:

  • 使用shell脚本接受可以将键作为变量包含的参数。将Dockerfile中的变量替换为sed或类似的,即用sh rundocker.sh MYTOKEN=foo它将取代https://{{MY_TOKEN}}@github.com/user-or-org/repo请注意,您还可以使用配置文件(在。使用yml或任何您想要的格式)来做同样的事情,但是使用环境变量。
  • 只为该项目创建一个github用户(并为其生成一个访问令牌)
用户回答回答于

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

  1. 生成ssh键ssh-keygen -q -t rsa -N '' -f repo-key这会给你回复密钥和回购密钥。
  2. 在存储库部署密钥中添加repo-key.PUB。

在GitHub上,去你的存储库>设置->部署密钥

  1. 将类似的内容添加到Dockerfile中:

添加repo-key/run\chmod 600/repo-key&&&eco“IdghtyFile/repo-key”>>>/etc/ssh/ssh[医]config&&\echo-e“StrictHostKeyChecking no”>>>/etc/ssh/ssh[医]配置&\//您的git克隆命令在这里..。

请注意,上面关闭了StrictHostKeyChecking,因此您不需要。SSH/已知[医]主人。虽然我可能更喜欢使用ssh-key扫描的解决方案,但在上面的一个答案中。

用户回答回答于

钥匙是用来密码保护的,这是造成问题的原因,下面列出了一个工作文件。

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

所属标签

可能回答问题的人

  • 应用案例分享

    1 粉丝490 提问5 回答
  • uncle_light

    5 粉丝518 提问4 回答
  • o o

    4 粉丝495 提问4 回答
  • 学生

    8 粉丝476 提问3 回答

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动