【问题标题】:jenkins in docker - Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?docker 中的 jenkins - 无法连接到 unix:///var/run/docker.sock 上的 Docker 守护程序。 docker 守护进程是否正在运行?
【发布时间】:2026-02-07 22:50:01
【问题描述】:

我在 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 中的 jenkins 版本无法访问 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?

【问题讨论】:

    标签: docker jenkins


    【解决方案1】:

    docker 客户端安装在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,您还可以使用 DOCKER_HOST 环境变量,如 the doc 中所述)。

    在您的容器中装载主机 /var/run/docker.sock

    @Herman Garcia所描述的回答:

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

    【讨论】:

    • 知道如何在 kubernetes 集群上将 dind 容器与 jenkins helm chart 安装合并吗?!
    【解决方案2】:

    你需要挂载你本地的/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
    

    【讨论】:

    • 我正在使用具有管理员权限的 Windows,并使用此命令通过 blueocean 运行 docker。但是我收到错误无法拨打 gRPC:无法连接到 Docker 守护进程。 'docker daemon' 是否在此主机上运行?:拨号 tcp:在 127.0.0.11:53 上查找 docker:没有这样的主机”docker container run --name jenkins-blueocean --rm --detach --network jenkins --env DOCKER_HOST =tcp://docker:2376 --env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 --publish 8080:8080 --publish 50000:50000 --volume jenkins-data:/var/jenkins_home --volume jenkins -docker-certs:/certs/client:ro jenkinsci/blueocean
    【解决方案3】:

    只尝试执行相同的命令,但以 sudo 开头

    例如

    sudo docker images
    sudo docker exec -it db4292380977 bash
    

    为避免以后使用 sudo,您应该在 Unix 操作系统中运行此命令

    sudo usermod -aG docker <your-user>
    

    更改您目前正在使用的用户。请记住注销并重新登录以使其生效!更多Docker安装信息点击here

    【讨论】:

    • 记得在docker容器内安装sudo,jenkins镜像没有预装sudo