在 jenkins docker 容器内执行 docker host 命令

2024-02-26

我有一个运行 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(使用前将#替换为@)

在 jenkins docker 容器内执行 docker host 命令 的相关文章

随机推荐