想使用 dockerfile build 一个镜像出来,但是由于我的项目是在远程 gitlab,我尝试将本地的私钥加入到镜像中,报错:
Host key verification failed.
fatal: Could not read from remote repository.
但是似乎并没有什么用,有什么方法将远程的项目 clone 到镜像里面呢?
1
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 |
2
jhsea3do 2017-05-23 17:22:53 +08:00
难道你在用
RUN \ git clone https://xxx/xxx 写个 build.sh 来 build image, 或者用 jenkins 把 至少做个 development key, 把私钥到处拷贝,不是什么好事 - -" |
3
tomczhen 2017-05-23 18:27:56 +08:00 1
搜索了一下,你这个问题分两部分看。
在 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 官方文档还是挺详细的。 |
4
SlipStupig OP @jhsea3do 我目前确实是这么干的,有什么更好的解决方案吗?
|
5
cloud107202 2017-05-23 22:25:43 +08:00
@SlipStupig git 也可以走 http 账号密码的形式,形如 git clone https://username:[email protected]/group/project 反正 dockerfile 在你本地也不担心密码泄露。
不过这种场景有些别扭:Image 作为交付的承载,理应在 gitlab 提交时候自己触发远程机器或跟它同一个域负责构建机器上的 CI 构建过程。最后你本地 pull 下来直接用 Image |
6
xiamx 2017-05-23 22:30:21 +08:00 via iPhone
把你的 id_rsa copy 进去
|
7
cloverstd 2017-05-23 22:54:11 +08:00
在 host 上面 clone,然后写 Dockerfile 的时候 COPY 进去
|
8
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。 |
9
orvice 2017-05-24 01:58:56 +08:00
弄个私有 docker hub 吧
|
10
beginor 2017-05-24 09:05:26 +08:00 via Android
对,楼上正解,弄个私有的 registry 吧。
|
11
jhsea3do 2017-05-24 15:44:13 +08:00 1
@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 |