前言:
-
当你在运行在 Kubernets 集群上的 Jenkins 中配置一个需要进行 Docker build 的
job 时,你可能会遇到下图这个问题:
image.png
what?
docker: not found,我总不能给 Jenkins 这个 pod 再安装一个 Docker 引擎吧!
- 简单来说就是你的容器内部无法找到 docker 这个命令,接着往下看。
怎么解决?
一、让 Jenkins 这个 Pod 支持运行 docker build
1 . 修改 Jenkins 的配置文件。因为我的 Jenkins 是通过 Deployment 创建的,所以我修改 Deployment 就好,请对应你环境的 Jenkins 应用的配置文件。
$ kubectl edit deployments.apps jenkins
volumes:
... ...
- hostPath:
path: /var/run/docker.sock
type: ""
name: docker-sock
- hostPath:
path: /usr/local/bin/docker
type: ""
name: docker-cmd
volumeMounts:
... ...
- mountPath: /var/run/docker.sock
name: docker-sock
- mountPath: /usr/local/bin/docker
name: docker-cmd
- 让 Jenkins 执行 job 的那个系统用户有对 docker 对执行权限,777 吧! 没毛病!
chmod 777 /var/run/docker.sock
否则会提示你没有权限:
image.png
- 如果你还需要将 build 好的 image push 到你的私有仓库,还需要在你的构建任务中,配置 docker login
echo `pwd`
echo `whoami`
docker build -t nginx:${BUILD_NUMBER} .
docker login 172.16.10.77:30006 -uadmin -pHarbor12345
docker tag nginx:${BUILD_NUMBER} 172.16.10.77:30006/public/nginx:${BUILD_NUMBER}
docker push 172.16.10.77:30006/public/nginx:${BUILD_NUMBER}
docker rmi nginx:${BUILD_NUMBER}
docker rmi 172.16.10.77:30006/public/nginx:${BUILD_NUMBER}
image.png
二、再次运行 Jenkins 上的 docker build 构建任务
-
点击 Build Now,立即构建
image.png -
查看 console out 输出,可以看到 docker build 、docker tag 、docker push 等任务都已经执行成功!
image.png
image.png