此问题在此处已有答案:
Docker not found when building docker image using Docker Jenkins container pipeline(8个答案)
上个月关门了。
我想在Windows上使用Docker Desktop和Jenkins设置CICD,并从Jenkins容器运行docker命令。据我所知,一种方法是通过套接字docker.sock
将主机docker守护程序暴露给Jenkins容器。当我运行下面的compose.yaml
时,
version: '3.8'
services:
jenkins:
image: jenkins/jenkins:lts
privileged: true
user: root
ports:
- 8080:8080
- 50000:50000
volumes:
- jenkins-data:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
volumes:
jenkins-data:
字符串
在安装了docker的Ubuntu虚拟机中使用docker compose up -d --build
命令,Jenkins容器可以运行docker命令,一切似乎都按预期工作。例如,我可以在docker容器中运行docker -v
(不需要sudo
)。
但是当我在我的Windows(Windows 10 Pro,19045.3693)笔记本电脑上运行相同的compose.yaml
与Docker Desktop(4.25.2)时,Jenkins容器无法运行docker命令。当我在Jenkins容器内运行docker -v
时,我得到错误:/bin/sh: 1: docker: not found
个
我还在Jenkins VM中安装了sudo
,并运行sudo docker -v
,得到错误:sudo: docker: command not found
个
我尝试过的更多的事情是使用一个额外的斜杠- //var/run/docker.sock:/var/run/docker.sock
。我尝试过使用命名管道,但我认为只有当你想运行一个Windows容器时才有意义。我还尝试过绑定挂载/usr/bin/docker:/usr/bin/docker
,//usr/bin/docker:/usr/bin/docker
和/usr/local/bin/docker:/usr/bin/docker
。
有什么想法吗?
编辑:我忘记了卷下的- /usr/bin/docker:/usr/bin/docker
。这是在Ubuntu中工作所需要的。
编辑:这篇文章是关于如何让它在Windows上与Docker Desktop一起工作的。所有其他帖子都没有提到Docker Desktop,并且似乎假设了Linux环境。在第一句话中添加了澄清。我认为这个问题不应该被关闭,因为它可以说明Ubuntu VM和Docker Desktop之间的差异。
1条答案
按热度按时间m3eecexj1#
当前的jenkins/jenkins:lts镜像没有安装docker客户端,你需要将其添加到镜像中并使用它。
有趣的是,即使在jenkins/jenkins:lts运行的容器中没有安装docker插件,你的compose文件也能在ubuntu虚拟机上工作。也许以前的jenkins/jenkins:lts镜像有它,而ubuntu虚拟机上的docker引擎仍然有它,这就是为什么你不应该使用latest,lts等运行标签/版本,因为底层软件可以并且会随着时间的推移而改变,你应该像jenkins/jenkis:1.2.3-debian这样固定你的版本。
无论如何,这适用于我的Windows 10机器与Docker Desktop for Windows:
创建这个Dockerfile:
字符串
**!!!很重要!!!**你必须在
RUN groupadd -g 1001 docker
命令中为docker组使用与在wsl发行版上相同的命令,你启用了Docker Desktop WSL 2集成,并从那里发出命令(docker build,docker run等)。你可以用getent group docker
检查wsl 2发行版上的命令,对我来说它是1001。注意事项:Docker引擎,服务器,本身并没有运行在这个wsl 2发行版中,而是有自己独立的wsl 2发行版,名为docker-desktop和docker-desktop-data。你可以用docker客户端连接到这个docker引擎服务器,docker命令。
创建镜像:
docker build -f Dockerfile -t myjenkins:1.0.0-docker-cli .
从您启用Docker Desktop集成的wsl 2发行版shell的映像运行容器:
docker run -v /var/run/docker.sock:/var/run/docker.sock --rm -it myjenkins:1.0.0.-docker-cli sh
在容器shell中执行
docker ps
,您将看到您的容器在主机上运行,包括您当前所在的容器。请注意,授予对容器的这种访问权限将授予jenkins用户对主机的根级别访问权限:https://docs.docker.com/engine/security/#docker-daemon-attack-surface