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

Lac*_*cer 1 jenkins docker

我在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?
Run Code Online (Sandbox Code Playgroud)

显然,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?
Run Code Online (Sandbox Code Playgroud)

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

题:

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

Pie*_* B. 5

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

你可以做什么:

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

库Docker映像提供了一种在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
Run Code Online (Sandbox Code Playgroud)

Docker守护程序在docker-dind容器中运行,并且可以使用相同的主机名进行访问。您只需要为Docker客户端提供守护程序主机(-H docker-dind在示例中,您还可以使用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
Run Code Online (Sandbox Code Playgroud)