Jenkins在Windows容器中调用Docker命令的配置方法?

请问运行在容器内的Jenkins如何配置可以调用docker命令?宿主机是Windows系统。

首先排除制作一个带有docker的Jenkins的镜像,这个办法有点老套。

尝试了一下docker in docker,但是貌似这个方案是基于Linux的。

在Windows上docker本身已经运行于wsl这类的虚拟机中了,如何再映射卷呢?

尝试过docker in docker,但是-v /var/run/docker.sock:/var/run/docker.sock这种命令在Windows的docker无法使用。

阅读 1.5k
avatarAI BotBETA

在Windows上,如果你想让运行在容器内的Jenkins调用Docker命令,一种可行的方法是使用Windows Subsystem for Linux (WSL)和Docker Desktop。

首先,确保你的系统已经安装了WSL和Docker Desktop。然后,按照以下步骤进行配置:

  1. 打开Docker Desktop,并确保它正在运行。
  2. 打开WSL终端。
  3. 创建一个新的目录,用于挂载Docker的宿主目录。例如:
mkdir ~/docker-host
  1. 在Docker Desktop中,打开“Docker Engine”设置,并找到“File sharing”部分。将刚刚创建的目录添加到共享列表中。
  2. 重启Docker Desktop。
  3. 在WSL终端中,创建一个新的Docker容器,并挂载刚刚创建的目录到容器的/var/run/docker.sock路径。例如:
docker run -it --name jenkins-container -v ~/docker-host:/var/run/docker.sock jenkins/jenkins:lts

这将创建一个名为jenkins-container的容器,并将宿主机的~/docker-host目录挂载到容器的/var/run/docker.sock路径。

  1. 现在,你可以在容器内的Jenkins中调用Docker命令了。

请注意,这种方法依赖于WSL和Docker Desktop,并且可能需要根据你的具体需求进行适当的调整。

1 个回答
✓ 已被采纳

该问题已解决。
Windows下也可使用docker in docker的方案。
Windows下的docker和Linux的配置略有不同。

  1. 首先docker-desktop必须按照如下配置。当前的docker必须挂载(是否应该用挂载)到已有的一个wsl发行版上。

1706093458024.png
该配置导致的区别是在WSL系统中是否可以直接执行docker命令,并且具有docker相关的目录。
此处开启后,即可使用-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker这种挂载卷的参数来让容器访问宿主机的docker命令。

  1. 其次是针对Windows系统,仅挂载-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker两个路径是不够的,还需要挂载docker-cli的路径,在WSL中的路径为/usr/bin/com.docker.cli。

即增加挂载-v /usr/bin/com.docker.cli:/usr/bin/com.docker.cli

完成以上两个配置可以在Windows下的docker中允许Jenkins,同时Jenkins中也可以执行宿主机的docker命令,目前看此种方式没有任何权限问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题