dcokerfile 想使用远程私有的 Repo

2017-05-23 14:00:56 +08:00
 SlipStupig

想使用 dockerfile build 一个镜像出来,但是由于我的项目是在远程 gitlab,我尝试将本地的私钥加入到镜像中,报错:

Host key verification failed.
fatal: Could not read from remote repository.

但是似乎并没有什么用,有什么方法将远程的项目 clone 到镜像里面呢?

2500 次点击
所在节点    程序员
12 条回复
blindpirate
2017-05-23 15:05:12 +08:00
这似乎是 host 的问题,需要设置 ssh 的 config。
参考: http://linuxcommando.blogspot.hk/2008/10/how-to-disable-ssh-host-key-checking.html
jhsea3do
2017-05-23 17:22:53 +08:00
难道你在用

RUN \
git clone https://xxx/xxx

写个 build.sh 来 build image, 或者用 jenkins 把

至少做个 development key, 把私钥到处拷贝,不是什么好事 - -"
tomczhen
2017-05-23 18:27:56 +08:00
搜索了一下,你这个问题分两部分看。

在 build 过程中使用私钥;每次都要获取最新的代码;

这里有个跟你差不多的例子:

https://stackoverflow.com/questions/25697813/accessing-secrets-private-files-needed-for-building-in-dockerfile

构建过程是有 cache 的,所以只会在第一次构建时获取代码,后面是不会获取的。

要么改成构建前获取最新代码,要么在 run 的时候才获取。

所以在 build 过程中使用私钥 这个问题就不存在了,不过引出一个另一个问题——在运行容器中使用私钥。

https://docs.docker.com/engine/swarm/secrets/#use-secrets-in-compose

官方文档还是挺详细的。
SlipStupig
2017-05-23 19:17:49 +08:00
@jhsea3do 我目前确实是这么干的,有什么更好的解决方案吗?
cloud107202
2017-05-23 22:25:43 +08:00
@SlipStupig git 也可以走 http 账号密码的形式,形如 git clone https://username:password@yourgitlab.com/group/project 反正 dockerfile 在你本地也不担心密码泄露。

不过这种场景有些别扭:Image 作为交付的承载,理应在 gitlab 提交时候自己触发远程机器或跟它同一个域负责构建机器上的 CI 构建过程。最后你本地 pull 下来直接用 Image
xiamx
2017-05-23 22:30:21 +08:00
把你的 id_rsa copy 进去
cloverstd
2017-05-23 22:54:11 +08:00
在 host 上面 clone,然后写 Dockerfile 的时候 COPY 进去
zk8802
2017-05-23 23:54:21 +08:00
a. GitLab 支持 deployment key。不要把自己的私钥用于部署。
b. 在 git clone 之前,你可以使用 ssh-keyscan 把 GitLab 的 SSH host key 加入到本地的 known hosts 中,这样可以避免 host key verification。
orvice
2017-05-24 01:58:56 +08:00
弄个私有 docker hub 吧
beginor
2017-05-24 09:05:26 +08:00
对,楼上正解,弄个私有的 registry 吧。
jhsea3do
2017-05-24 15:44:13 +08:00
@SlipStupig

不知道你的代码工程是啥语言,我制作 docker image 不会把源代码放到容器里面,
所以我都在主机上先 pull, 然后 make compile+package
然后 Dockerfile 里面用 ADD 指令把 package 拷贝到容器里面

然后多个版本用 tag 区别,比如我做一个 myapp 的工程

myapp:1.0-centos6
myapp:1.0-xenial
myapp:1.5-xenial-py3

java 用 maven (jar/war)
node 用 uglify + tar ball ...
python 的话 至少也要 tar ball 的

如果你 shell 不熟练,还是用 jenkins,把 scm 的动作交给 jenkins 帮你做掉


我之前回答的 development keys 是我说错了,应为 deploy keys
tomczhen
2017-05-25 10:46:36 +08:00
@jhsea3do 可以试试新的多阶段构建功能( multi-stage build )

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/363189

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX