docker中的jenkins-无法通过unix:///var/run/docker.sock连接到Docker守护程序。泊坞窗守护程序正在运行吗?

时间:2019-03-08 01:33:23

标签: docker jenkins

我正在docker中运行https://hub.docker.com/r/jenkinsci/blueocean/。尝试在jenkins中构建docker映像。

但出现以下错误:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

显然,Docker中的詹金斯版本无法访问docker二进制文件。

我通过

确认了这一点
docker exec -it db4292380977 bash
docker images
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

“ db4292380977”是运行中的容器。它显示了相同的错误。

问题:

  • 如何允许在jenkins容器中访问docker?

3 个答案:

答案 0 :(得分:1)

只需尝试执行相同的命令,但开头应使用sudo

例如

sudo docker images
sudo docker exec -it db4292380977 bash

为避免将来再使用sudo,应在Unix O.S中运行此命令

sudo usermod -aG docker <your-user>

更改当前正在使用的用户。请记住注销并重新登录才能生效!有关Docker安装的更多信息,请单击here

答案 1 :(得分:1)

泊坞窗客户端安装在jenkinsci/blueocean映像上,但未安装在守护程序上。 Docker客户端将使用守护程序(默认情况下通过套接字unix:///var/run/docker.sock)。 Docker客户端需要一个Docker守护程序才能工作,您可以阅读Docker Architecture以获得更多信息。

您可以做什么:

使用docker-in-docker(DinD)映像

Library Docker image提供了一种在Docker中运行Docker守护程序的方法,然后可以从另一个容器中使用它。例如,使用普通的docker CLI:

docker run --name docker-dind --privileged -d docker:stable-dind
docker run --name jenkins --link=docker-dind -d jenkinsci/blueocean
docker exec jenkins docker -H docker-dind images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

Docker守护程序在docker-dind容器中运行,并且可以使用相同的主机名进行访问。您只需要为Docker客户端提供守护程序主机(在示例中为-H docker-dind,您还可以使用the doc中所述的DOCKER_HOST env变量)。

将主机/var/run/docker.sock安装在容器中

@Herman Garcia所述:

docker run -p 8080:8080 --user root \
     -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean

答案 2 :(得分:0)

您需要挂载本地/var/run/docker.sock并以root用户的身份运行容器

注意::这可能是一个安全漏洞,所以请小心谁可以访问jenkins容器

docker run -p 8080:8080 --user root \
     -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean

您将能够在容器内执行docker

➜  ~  docker exec -it gracious_agnesi bash                                                                                              
bash-4.4# docker ps                                                                                                                     
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                        
       NAMES                                                                                                                            
c4dc85b0d88c        jenkinsci/blueocean   "/sbin/tini -- /usr/…"   18 seconds ago      Up 16 seconds       0.0.0.0:8080->8080/tcp, 50000
/tcp   gracious_agnesi