可以,通过挂载宿主机的/var/run/docker.sock,Jenkins容器能直接调用宿主机Docker引擎执行docker build等命令,实现轻量级容器化构建;需同时挂载JENKINS_HOME实现配置持久化,并注意权限与网络访问安全。

可以直接用 Docker 启动 Jenkins 容器,并通过挂载宿主机的 /var/run/docker.sock 让它调用宿主机的 Docker 引擎——这是实现容器化构建最常用、最轻量的方式。
核心命令:启动带 Docker 权限的 Jenkins
运行以下命令即可启动一个可持久化、能执行 docker 命令的 Jenkins 容器:
docker run -d \
-p 8080:8080 \
-p 50000:50000 \
--name jenkins \
-v /opt/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
--restart=unless-stopped \
jenkins/jenkins:lts
说明:
- /opt/jenkins_home 是你提前创建的本地目录,用于持久保存 Jenkins 配置、插件、任务等;
- /var/run/docker.sock 是宿主机 Docker daemon 的通信入口,挂载后 Jenkins 容器内执行的 docker build、docker run 等命令,实际由宿主机 Docker 执行;
- 不需要在容器里装 Docker,也不需要额外启动 dockerd,省资源、易维护。
为什么必须挂载 docker.sock?
Jenkins 默认无法访问 Docker。不挂载的话,在 Pipeline 或 Shell 构建步骤中执行 docker ps 会报错:Cannot connect to the Docker daemon。挂载后:
- 容器内
docker images和宿主机输出一致,说明共享同一套引擎; - 构建出的镜像直接出现在宿主机
docker images列表里; - 启动的容器是宿主机上的“兄弟容器”,不是嵌套在 Jenkins 容器里的子容器。
进阶建议:提升可用性与安全性
生产环境推荐补充以下挂载和配置:
- 把宿主机的
docker二进制文件也挂进去:-v /usr/bin/docker:/usr/bin/docker:ro,避免因容器镜像没自带 client 而命令不可用; - 挂载
/etc/docker:-v /etc/docker:/etc/docker:ro,让容器内 Docker client 自动读取宿主机的镜像加速、insecure-registries 等配置; - Jenkins 实例务必限制访问范围(如仅内网),并启用 Role-Based Authorization Strategy 插件做权限隔离——因为挂载
docker.sock等价于赋予容器宿主机 root 级 Docker 控制权。
验证是否生效
启动后访问 http://localhost:8080,完成初始化。新建一个自由风格项目,在构建步骤中添加 “执行 shell”:
docker info | head -5
docker run --rm hello-world
如果控制台输出了 Docker 版本信息和 “Hello from Docker!”,就说明挂载成功、通路畅通。


















