我正在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”是运行中的容器。它显示了相同的错误。
问题:
答案 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以获得更多信息。
您可以做什么:
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