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

我有一个运行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 =真,它仍然无法正常工作。

如果你有任何想法!

这个问题的一个相关的post是这个 。

然而,就这一点(就像我有同样的问题)几句话。 有两件事你需要做:(1)​​安装docker.sock和(2)运行docker.sock服务。

关于(1):正如@yclian所提到的,你必须把jenkins放入docker组。

我跟随了阿德里安·穆阿特的指示 。 他build议在sudo docker run ..的构build步骤中执行docker命令sudo docker run .. 在我的情况下, sudo很好,但总的来说,这可能是一个安全问题,因为Jenkins用户可能获得对主机的根访问权限,并可能创build在主机上挂载任意目录的容器。

关于(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 )或者指定它在一个Dockerfile

如果你已经完成了你的构build步骤可能包含这样的命令sudo docker build -t my-image . 这个图像也可以在主机上使用。

发生这种情况时,首先查看拨号的/var/run/docker.sock 。 如果我没有错,你将不得不把你的jenkins用户放到jenkins组中,才能访问套接字文件。

通过以jenkins用户身份login到shell来解决这个问题也是很好的,也可以通过Jenkins UI进行故障排除。