V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SlipStupig
V2EX  ›  程序员

dcokerfile 想使用远程私有的 Repo

  •  
  •   SlipStupig · 2017-05-23 14:00:56 +08:00 · 2387 次点击
    这是一个创建于 2528 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    12 条回复    2017-05-25 10:46:36 +08:00
    blindpirate
        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
    jhsea3do
        2
    jhsea3do  
       2017-05-23 17:22:53 +08:00
    难道你在用

    RUN \
    git clone https://xxx/xxx

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

    至少做个 development key, 把私钥到处拷贝,不是什么好事 - -"
    tomczhen
        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

    官方文档还是挺详细的。
    SlipStupig
        4
    SlipStupig  
    OP
       2017-05-23 19:17:49 +08:00
    @jhsea3do 我目前确实是这么干的,有什么更好的解决方案吗?
    cloud107202
        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
    xiamx
        6
    xiamx  
       2017-05-23 22:30:21 +08:00 via iPhone
    把你的 id_rsa copy 进去
    cloverstd
        7
    cloverstd  
       2017-05-23 22:54:11 +08:00
    在 host 上面 clone,然后写 Dockerfile 的时候 COPY 进去
    zk8802
        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。
    orvice
        9
    orvice  
       2017-05-24 01:58:56 +08:00
    弄个私有 docker hub 吧
    beginor
        10
    beginor  
       2017-05-24 09:05:26 +08:00 via Android
    对,楼上正解,弄个私有的 registry 吧。
    jhsea3do
        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
    tomczhen
        12
    tomczhen  
       2017-05-25 10:46:36 +08:00 via iPhone   ❤️ 1
    @jhsea3do 可以试试新的多阶段构建功能( multi-stage build )
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3260 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 95ms · UTC 13:44 · PVG 21:44 · LAX 06:44 · JFK 09:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.