我有一个运行 jenkins 的 docker 容器。我想在这个容器内启动另一个容器,所以在这个容器外。
我尝试使用以下命令启动我的 jenkins Controller :
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,它仍然不起作用。
如果您有任何想法!
最佳答案
与此问题相关的帖子是 this one .
但是,就此说几句(因为我遇到了同样的问题)。您需要做两件事: (1) mount 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/bash
和 apt-get install docker-engine
)或在 Dockerfile
中指定它.如果您已经完成了这两个构建步骤,则可能包含这样的命令
sudo docker build -t my-image .
该图像也将在主机上可用。
关于jenkins - 在 jenkins docker 容器内执行 docker host 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33397362/