在jenkins docker容器中执行docker host命令

时间:2015-10-28 17:11:58

标签: jenkins docker

我有一个运行jenkins的docker容器。我想在这个容器里面启动其他容器,所以在这个容器之外。

我试图用:

启动我的jenkins控制器
docker run -v /var/run/docker.sock:/var/run/docker.sock  -v $(which docker):/bin/docker

(如此处所写:https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

但是当我在我的容器内部尝试运行Docker命令时,我有一个典型的消息

 FATA[0000] Get http://%2Fvar%2Frun%2Fdocker.sock/v1.18/containers/json: dial unix /var/run/docker.sock: 
connect: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS? 

无法在此容器中运行docker命令..

我已经尝试过使用和不使用--privileged = true,它仍然无法正常工作。

如果您有任何想法!

2 个答案:

答案 0 :(得分:1)

此问题的相关帖子是this one

然而,就此而言(就像我有同样的问题)。您需要做两件事:(1)挂载docker.sock和(2)运行docker服务。

关于(1):如@yclian所述,您必须将jenkins用于docker组。

我跟着Adrian Mouat's instruction。他建议在sudo docker run ..的构建步骤中执行docker命令。 sudo在我的场景中很好,但一般来说,它可能是一个安全问题,因为Jenkins用户可以获得对主机的root访问权限,并且可以创建在主机上挂载任意目录的容器。

关于命令中的(2)和-v $(which docker):/bin/docker。我在MacOS上。 which docker给了我/usr/local/bin/docker/这是正确的,但容器内仍然没有docker。我用

启动了jenkins容器
docker run -p 8080:8080 -p 50000:50000 -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /Users/matthaeus/.jenkins_home:/var/jenkins_home -t -i jenkins

如果您不想这样做,则必须在容器内安装docker engine,方法是手动连接(docker exec -t -i container-id /bin/bashapt-get install docker-engine)或在{ {1}}。

如果您已完成这两个步骤,则构建步骤可能包含此Dockerfile之类的命令,并且此图像也可在主机上使用。

答案 1 :(得分:0)

发生这种情况时,首先要看一下它所拨打的/var/run/docker.sock。如果我没错,您必须将jenkins用户放入docker组才能访问套接字文件。

通过以jenkins用户身份登录shell,通过Jenkins UI进行故障排除,也可以解决此问题。