You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Pipeline Slave中Docker Server版本老旧问题及升级方法问询

问题解答:Jenkins Pipeline中Docker Server版本老旧的原因及解决办法

一、老旧Docker Server版本的来源

你看到的老旧Docker Server版本,其实来自Kubernetes集群宿主机节点的Docker守护进程。

具体来说:你的Jenkins本身是以Kubernetes容器形式运行的,自身并没有安装Docker;而Pipeline里的Slave容器通过挂载/var/run/docker.sock(就是你Jenkinsfile里的hostPathVolume配置项),直接复用了Kubernetes宿主机上的Docker后台进程。因为你的K8s集群是用kops在AWS上创建的,kops默认配置的Docker版本本身就比较老旧,所以执行docker version时,Server端显示的就是宿主机上这个旧版本的Docker。

而Slave镜像里的Docker客户端版本较新,只是容器内的客户端程序,它通过socket连接到宿主机的旧版Server,所以会出现客户端版本高于Server的情况(你也能看到输出里的API版本降级提示)。

二、更新Docker版本的具体步骤

要让Jenkins用上更新的Docker版本,本质是要更新Kubernetes集群所有宿主机节点的Docker版本,用kops可以按以下步骤操作:

  1. 编辑集群配置
    执行以下命令打开集群配置文件(默认使用vi编辑器):

    kops edit cluster
    

    在spec节点下添加Docker的配置块,注意logDriver是必填项(缺失会报错),然后指定你要升级的Docker版本(注意kops仅支持特定Docker版本,这里以17.09.0为例):

    spec:
      docker: # 添加Docker配置
        logDriver: json-file # 必填属性,不可省略
        version: 17.09.0 # 注意:仅特定Docker版本被kops支持
    

    保存并退出编辑器即可。

  2. 应用集群配置更新
    执行以下命令让kops生成并确认更新后的集群配置:

    kops update cluster
    
  3. 滚动更新集群节点
    执行以下命令触发集群节点的滚动更新,让所有节点完成Docker版本升级(--yes参数会直接执行操作,无需二次确认):

    kops rolling-update cluster --yes
    

等滚动更新全部完成后,再回到Jenkins Pipeline里执行docker version,就能看到Server端的Docker版本已经更新到你指定的版本了。

内容的提问来源于stack exchange,提问作者frankd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:23:48