我有一个奴隶在 Jenkins 管道中运行。从属镜像具有最新版本的 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
最佳答案
看来您正在将 /var/run/docker.sock
从 jenkins 主机共享到容器中。
当您的 18.03.1-ce docker
客户端连接到该 /var/run/docker.sock
套接字时,它正在与 jenkins 主机上运行的 dockerd 进行通信.
如果您希望升级该 docker 守护进程,则应遵循与 jenkins 运行平台相关的 docker 安装/升级说明。
升级主机的 dockerd 后,容器内的 docker
客户端将看到您最终安装的任何版本。
关于docker - 运行 Jenkins Pipeline Slave 时如何升级 docker 服务器版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50376061/