如何在 macOS 下设置 Jenkins 并访问 Docker 守护进程?

如何在 macOS 下设置 Jenkins 并访问 Docker 守护进程?

我按照简单的步骤通过 Docker 容器启动并运行 Jenkins:https://jenkins.io/doc/book/installing/#downloading-and-running-jenkins-in-docker

基本上,我所做的就是运行:

docker run \
  --rm \
  -d \
  -p 8080:8080 \
  -v jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkinsci/blueocean

现在,当尝试在 Jenkins 内部设置管道时,它找不到 Docker 守护进程。我从 Jenkins 内部的管道获得错误输出:

+ docker pull python:3.6.3
Warning: failed to get default registry endpoint from daemon (Cannot connect to the Docker daemon. Is the docker daemon running on this host?). Using system default: https://index.docker.io/v1/
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
script returned exit code 1

因此,这表明 Jenkins 看不到正在运行的 Docker 守护程序。-v /var/run/docker.sock:/var/run/docker.sock容器启动中的选项:应该有效,但我不确定这里可能遗漏了哪些其他设置步骤?

我正在运行它macOS 10.13,主机上的 Docker 安装似乎运行良好。有一些 Jenkins 配置点,可以配置更多 docker 信息和安装,但似乎默认设置应该可以工作?

如果我缺少任何能让 jenkins 访问 docker 守护进程的信息,请告诉我。

[更新]

经过更多搜索,每个人都指出/var/run/docker.sock权限是此类问题的主要根源。查看这个已安装的套接字,似乎用户jenkins不属于正确的组。我猜主机组到容器的映射是通过 id 完成的,而这根本不匹配?

答案1

添加--group-add dockerdocker run命令以确保在 jenkins docker 容器内运行的用户将属于主机上的等效 docker 组。

docker run \
  --group-add docker \
  --rm \
  -d \
  -p 8080:8080 \
  -v jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkinsci/blueocean

已安装的套接字:/var/run/docker.sock导致对其在主机上和 jenkins 容器内属于哪个组的混淆。

这个 GitHub 问题中有一些讨论:https://github.com/jenkinsci/docker/issues/263

相关内容