Docker中部署的Jenkins连接Docker Daemon报connection refused如何解决
问题原因
docker: not found报错是因为Jenkins容器内部默认没有内置Docker客户端二进制文件,你虽然在全局工具配置中设置了Docker自动安装,但如果没有在Pipeline中显式调用该全局工具的Docker路径,任务执行时会默认读取系统PATH中的Docker命令,自然找不到对应文件。- 后续无法连接Docker Daemon的报错是由Docker的C/S架构特性导致:你的Windows本地直接安装的Jenkins可以直接访问本机运行的Docker Daemon服务,但容器内运行的Jenkins默认没有可访问的Docker服务端,就算安装了Docker客户端也无法完成调用。
解决方案
方案一:挂载宿主机Docker(推荐,配置简单资源占用低)
该方案直接复用宿主机的Docker服务,不需要在Jenkins容器内额外安装Docker:
- 停止当前运行的Jenkins容器,重新启动时添加两个挂载参数:
- 挂载宿主机Docker客户端二进制到容器:添加启动参数
-v /usr/bin/docker:/usr/bin/docker - 挂载宿主机Docker套接字文件到容器,让容器内客户端可以直接和宿主机Daemon通信:添加启动参数
-v /var/run/docker.sock:/var/run/docker.sock
- 挂载宿主机Docker客户端二进制到容器:添加启动参数
- 解决套接字权限问题:容器启动后执行命令
docker exec -u root -it [你的Jenkins容器名称] chmod 666 /var/run/docker.sock - 重启Jenkins后重新运行Pipeline即可,不需要额外修改Docker插件的Daemon连接地址。
方案二:Docker in Docker独立部署(适合需要隔离Docker环境的场景)
- 启动Jenkins容器时添加
--privileged特权参数,允许容器内运行Docker服务 - 进入Jenkins容器内部手动安装Docker服务,并配置Docker服务开机自启
- 配置Jenkins Docker插件的Daemon地址为
unix:///var/run/docker.sock即可正常连接。
内容的提问来源于stack exchange,提问作者HaRLoFei
相关产品推荐
相关产品推荐

