在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/bash
和apt-get install docker-engine
)或者指定它在一个Dockerfile
。
如果你已经完成了你的构build步骤可能包含这样的命令sudo docker build -t my-image .
这个图像也可以在主机上使用。
发生这种情况时,首先查看拨号的/var/run/docker.sock
。 如果我没有错,你将不得不把你的jenkins
用户放到jenkins
组中,才能访问套接字文件。
通过以jenkins
用户身份login到shell来解决这个问题也是很好的,也可以通过Jenkins UI进行故障排除。