我正在尝试使用Docker克隆来自github的私人仓库。问题是我需要使用ssh来访问该repo。我在github项目的设置中添加了一个密钥,我想这个密钥用于识别docker的服务器。
我的问题是我无法弄清楚我应该在Dockerfile中写什么,以便服务器在尝试访问我的github repo时使用该密钥。我看到了将id_rsa添加到容器中的示例,但我不知道id_rsa存储在其服务器上的位置(如果存在)
RUN mkdir /root/.ssh/
# can't find the file id_rsa
ADD id_rsa /root/.ssh/id_rsa
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
run git clone git@github.com:user/repo.git
如何从docker的服务器访问我的私人仓库?
答案 0 :(得分:7)
我设法通过在密钥上使用ssh-add来完成此操作。
使用多个RUN
指令的“问题”是,下一个RUN
将无法使用非持久性数据。我设法登录并使用github私人回购与
RUN eval `ssh-agent -s` && \
ssh-add id_rsa && \
git clone git@github.com:user/repo.git
通过在单个CMD上使用&&
,eval
进程仍将运行,并且当您连接到github时,ssh-agent已加载密钥。
我希望这会有所帮助。
答案 1 :(得分:4)
如果要使用Dockerfile中的git
,则需要以与配置自己的开发机器相同的方式配置容器。
我真的不明白哪个是"他们的"在"他们的服务器",所以我只是在猜测。
当您使用github注册公钥时,您也应该拥有私钥。这是您在其他示例中看到的id_rsa
。
如果找不到该文件,请重新开始。删除旧密钥generate a new one并在github和docker构建上下文中进行配置(在您的示例中,只需将其复制到与Dockerfile相同的文件夹中)。
作为一种不同的策略,您可能希望在图像构建过程之外进行检出(在本地克隆并将ADD
所有内容都复制到图像中。)