我有一个运行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,它仍然无法正常工作。
如果您有任何想法!
答案 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
。我用
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
)或在{ {1}}。
如果您已完成这两个步骤,则构建步骤可能包含此Dockerfile
之类的命令,并且此图像也可在主机上使用。
答案 1 :(得分:0)
发生这种情况时,首先要看一下它所拨打的/var/run/docker.sock
。如果我没错,您必须将jenkins
用户放入docker
组才能访问套接字文件。
通过以jenkins
用户身份登录shell,通过Jenkins UI进行故障排除,也可以解决此问题。