gpt4 book ai didi

sockets - 在 Jenkins 奴隶上的容器内访问Docker

转载 作者:行者123 更新时间:2023-12-02 21:26:42 25 4
gpt4 key购买 nike

我的问题基本上是Access Docker socket within containerAccessing docker host from (jenkins) docker container的组合

我的目标

可以完全通过docker化运行Jenkins,包括动态从属,并能够在从属中创建docker-container。

如果最后将Unix-docker-sock正确地暴露给Jenkins主服务器,那么除了https://github.com/maxfields2000/dockerjenkins_tutorial外,除了最后一部分,一切都已经可以工作了。

问题

与动态配置的从服务器不同,主服务器是通过docker-compose启动的,因此可以正确访问UNIX套接字。

对于动态生成的从站,此方法不起作用。
我试图将访问权限转发给docker

VOLUME /var/run/docker.sock
VOLUME /var/lib/docker

在构建图像期间。不幸的是,到目前为止,当尝试访问从设备中创建的 Permission denied (socket: /run/docker.sock)时,我得到了 docker.sock: https://gist.github.com/geoHeil/1752b46d6d38bdbbc460556e38263bc3
奇怪的是:从站中的用户是root。

那么,为什么我不能访问 docker.sock?或者我如何刻录 --privileged标志,以使权限被拒绝的问题消失?

最佳答案

在docker 1.10中引入了新的User namespace ,因此共享docker.sock是不够的,因为容器内的root不再是主机上的root。
我最近也玩过Jenkins容器,我想使用主机docker引擎构建容器。
我所做的步骤是:

查找Docker组的组ID:

$ id
..... 999(docker)

运行具有两个卷的jenkins容器-一个包含Docker客户端可执行文件,另一个共享docker Unix套接字。请注意我如何使用 --group-add将容器用户添加到docker组,以允许访问:
docker run --name jenkins -tid -p 8080:8080 --group-add=999 -v /path-to-my-docker-client:/home/jenkins/docker -v /var/run/docker.sock:/var/run/docker.sock jenkins

经过测试,发现它确实有效:
docker exec -ti jenkins bash
./docker ps

查看更多有关其他组的信息 here

另一种方法是使用 --privileged标志而不是--group-add,但最好尽可能避免使用

关于sockets - 在 Jenkins 奴隶上的容器内访问Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36614105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com