【问题标题】:How to upgrade docker server version when running a Jenkins Pipeline Slave运行 Jenkins Pipeline Slave 时如何升级 docker 服务器版本
【发布时间】:2018-05-16 16:41:17
【问题描述】:

我有一个奴隶在詹金斯管道中运行。从镜像有最新版本的 docker,但服务器版本很旧。我不知道 Jenkins 是如何启动容器的,或者 jenkins 将什么用于 docker 服务器。我创建了一个非常简单的 jenkins 文件:

#!/usr/bin/groovy

podTemplate(label: 'jenkins-pipeline', 
    containers: [
        containerTemplate(name: 'jnlp', image: 'myrepo/jnlp-docker:2.0')
    ],
    volumes:[
        hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
    ]){
    node ('jenkins-pipeline') {
        sh("docker version")    
   }
}

那个“docker version”命令的输出是:

Client:
  Version:      18.03.1-ce
  API version:  1.26 (downgraded from 1.37)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:17:14 2018
  OS/Arch:      linux/amd64
  Experimental: false
  Orchestrator: swarm

Server:
  Engine:
    Version:      1.13.1
    API version:  1.26 (minimum version 1.12)
    Go version:   go1.7.5
    Git commit:   092cba3
    Built:        Wed Feb  8 06:36:34 2017
    OS/Arch:      linux/amd64
    Experimental: false

那么服务器版本 1.13.1 来自哪里?如何升级 Jenkins 以使用更新的版本?

编辑。程序员有下面的解决方案,但我会在这里添加细节。 Jenkins 作为 kubernetes 容器运行并且没有安装 docker,但是 Jenkins 以某种方式将 docker 守护程序从 Kubernetes 主机节点共享到 Jenkins Pipeline 从容器。我的 kubernetes 集群(在 AWS 上运行,使用 kops 创建)默认带有旧版本的 docker。我不得不用更高的 docker 版本更新我的 kubernetes 集群。步骤是

kops edit cluster 

#kops edit cluster opens vi.  Add docker property as shown below and save
spec:
  docker: #add docker config
    logDriver: json-file #required property.  Errors out when missing
    version: 17.09.0 #caution, only specific docker versions are supported

kops update cluster
kops rolling-update cluster --yes

【问题讨论】:

    标签: docker jenkins jenkins-pipeline


    【解决方案1】:

    您似乎正在将 jenkins 主机中的 /var/run/docker.sock 共享到容器中。

    当您的 18.03.1-ce docker 客户端连接到该 /var/run/docker.sock 套接字时,它正在与运行在 jenkins 主机上的 dockerd 通信。

    如果您希望升级该 docker 守护程序,您应该按照与运行 jenkins 的平台相关的 docker install/upgrade 说明进行操作。

    升级主机的 dockerd 后,容器内的 docker 客户端将看到您最终安装的任何版本。

    【讨论】:

    • 我被卡住了,因为 Jenkins 本身在一个没有安装 docker 的容器中运行: ls /var/run/docker.sock ls: cannot access '/var/run/docker.sock' : 没有这样的文件或目录
    • 事实证明,我的 kubernetes 集群(在用 kops 创建的 aws 中)默认有一个旧的 docker 版本。我更新了那个版本并得到了我期望的结果。
    猜你喜欢
    • 1970-01-01
    • 2019-03-04
    • 2021-07-13
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多