Docker Desktop单节点K8s中Jenkins挂载host的docker.sock失败求助
针对你在Docker Desktop Kubernetes环境中Jenkins容器无法连接主机Docker daemon的问题,以下是具体排查和解决步骤:
1. 修正Docker Socket的HostPath路径
你当前Deployment中配置的/host_mnt/var/run/docker.sock是macOS平台Docker Desktop的映射路径,在Ubuntu主机上,Docker daemon的socket实际路径是/var/run/docker.sock。修改Deployment的volumes配置:
volumes: - name: docker-sock hostPath: path: "/var/run/docker.sock" type: Socket
2. 确认主机Docker组的真实GID
你在Dockerfile中指定了DOCKER_GID=999,但Ubuntu主机上的docker组GID可能并非999。在主机执行以下命令查看实际GID:
getent group docker
输出格式类似docker:x:1001:,其中1001就是真实GID。将Dockerfile中的ARG DOCKER_GID=999替换为实际数值,重新构建镜像。
3. 检查Docker Desktop安全配置
- 打开Docker Desktop设置,进入Settings > Resources > File Sharing,确认
/var/run/docker.sock已被添加到共享列表。 - 进入Settings > Docker Engine,检查daemon配置是否强制启用了TLS认证(如果有
tls: true相关配置,需要在Jenkins容器中配置对应证书,否则暂时注释以允许无TLS本地连接)。
4. 容器内权限验证
进入Jenkins容器,执行以下命令确认权限配置:
# 查看jenkins用户所属组 id jenkins # 查看docker.sock的权限信息 ls -l /var/run/docker.sock
确保/var/run/docker.sock的组属主是docker组,且jenkins用户已加入该组。如果权限不符,可在主机上调整docker.sock的组权限(不推荐),或确保镜像中jenkins用户的组配置正确。
5. 移除不必要的Privileged模式
挂载docker.sock不需要开启privileged: true,该配置会带来安全风险。可将Deployment中容器的securityContext.privileged: true移除,仅保留必要的权限配置。
额外排查步骤
如果以上操作后仍无法连接,可尝试在容器内以root身份执行docker info:
su - root docker info
- 如果root能成功连接,说明是jenkins用户的权限配置问题,重新检查组添加步骤。
- 如果root也无法连接,说明socket路径错误或Docker daemon未正常运行,可在主机上执行
systemctl status docker确认daemon状态。
内容的提问来源于stack exchange,提问作者Peter S.

