看好多人说这个问题是因为Jenkins容器里没有安装docker,其实不是这样。我根本不需要在Jenkins容器里面再装一个docker,我jenkins就是用docker跑的,干嘛再在容器里面装一个docker。
其实这个问题是因为run docker的时候没有将 Docker 守护进程的 UNIX 套接字挂载到 Jenkins 容器内。
跑docker的时候挂载一下就可以了,例:
docker run的时候我们要加上
-u root
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/bin/docker:/usr/bin/docker
完整版:
docker run
-u root
-d -p 8080:8080 -p 50000:50000
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/bin/docker:/usr/bin/docker
--name jenkins jenkins/jenkins:lts
加上这三条命令的目的是允许在容器内部运行的进程(例如 Jenkins 或其他 CI/CD 工具)能够直接与宿主机的 Docker 守护进程通信,就好像它们是直接在宿主机上运行一样。
-u root
给了容器对宿主机 Docker 守护进程的完全访问权限,相当于给了容器宿主机的 root 权限
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/bin/docker:/usr/bin/docker
底下两条命令是挂载。