Jenkins 使用宿主机的Docker

发布于:2025-07-09 ⋅ 阅读:(17) ⋅ 点赞:(0)

背景:不想在Jenkins 内部安装Docker,想直接使用Jenkins服务所在的系统安装的docker

当你在 Jenkins 中执行 docker 命令时,实际上是通过 Docker 客户端与 Docker 守护进程进行通信。Docker 客户端和守护进程之间的通信是通过一个名为 /var/run/docker.sock 的 Unix socket 进行的。默认情况下,只有 root 用户和属于 docker 组的用户才有权限访问这个 socket 文件。

当 Jenkins 尝试运行 docker build 或其他 docker 命令时,它需要通过 /var/run/docker.sock 与 Docker 守护进程交互。如果 Jenkins 运行的用户(通常是 jenkins)没有足够的权限访问这个 socket 文件,就会出现类似下面的错误

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

cd /var/run/
ls -l


# 只有 root 和 docker 组的成员可以访问/var/run/docker.sock
sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock


# jenkins 用户添加到 docker 组
sudo usermod -aG docker jenkins

# 期望输出:jenkins : jenkins docker
groups jenkins

# 检查 Jenkins 用户的 Shell 设置 非交互式(bin/false)
grep jenkins /etc/passwd


# 将Jenkins 用户的 shell 修改为 /bin/bash 或其他合适的交互式 shell
sudo usermod -s /bin/bash jenkins

# 检查
grep jenkins /etc/passwd

#将 Jenkins 用户添加到 Docker 组
sudo usermod -aG docker jenkins


sudo su - jenkins

# 期望输出 jenkins  如果不生效,尝试重启系统  reboot
whoami


# 尝试jenkins能否使用外部docker
docker ps

目前你看到的 -bash-4.2$ 是因为 Jenkins 用户主目录中没有 .bashrc.bash_profile 等配置文件。你可以通过以下命令来修复这个问题:

exit

cp /etc/skel/.bash* /var/lib/jenkins/
chown -R jenkins:jenkins /var/lib/jenkins/.bash*


# 检查
sudo su - jenkins

 


网站公告

今日签到

点亮在社区的每一天
去签到