我有一个运行 jenkins 的 docker 容器。我想在这个容器内部启动其他容器,所以在这个容器外部。
我尝试用以下命令启动我的詹金斯控制器:
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/ 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 https://stackoverflow.com/questions/30072491/jenkins-in-docker-with-access-to-host-docker?rq=1.
不过,对此有几句话(因为我也有同样的问题)。您需要做两件事:(1)挂载docker.sock
和(2)有docker
服务正在运行。
关于(1):正如@yclian提到的,你必须把jenkins
用户进入docker
group.
我跟着阿德里安·穆亚特的指导 http://container-solutions.com/running-docker-in-jenkins-in-docker/。他建议在构建步骤中执行 docker 命令sudo docker run ..
. The 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
and apt-get install docker-engine
)或在a中指定它Dockerfile
.
如果您已完成这两个构建步骤,则可能包含如下命令sudo docker build -t my-image .
并且该映像也将在主机上可用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)