AKS上Azure DevOps自托管代理运行Docker构建任务无法连接daemon问题
可行解决方案
核心诱因
该报错在AKS 1.19.11环境下通常由两个问题导致:一是AKS 1.19.x版本默认节点运行时已切换为containerd而非Docker,节点上默认不存在/var/run/docker.sock文件;二是即便节点存在该文件,挂载后容器内运行代理的用户也没有访问sock文件的权限。
分场景处理方案
场景1:节点运行时为containerd
- 先登录AKS节点执行
ls /var/run/ | grep docker.sock,如果无输出则说明节点运行时为containerd,可选择两种方案处理:- 新建使用Docker运行时的节点池,将自托管代理调度到新节点池运行
- 放弃Docker@2任务,替换为Kaniko、buildah等无需Docker daemon的镜像构建工具,无需挂载主机sock文件即可完成镜像构建,安全性更高
场景2:节点存在docker.sock文件但无访问权限
主机上/var/run/docker.sock默认属组为docker,GID通常为999,而Azure DevOps代理容器默认以非root的azdo用户运行,没有该文件的访问权限,修改代理Deployment配置添加补充组权限即可:
spec: securityContext: # 999为节点docker组GID,可执行`getent group docker | cut -d: -f3`确认后替换 supplementalGroups: [999] containers: - name: azdo-agent # 保留原有的镜像、env等配置 volumeMounts: - mountPath: /var/run/docker.sock name: docker-volume volumes: - name: docker-volume hostPath: path: /var/run/docker.sock
- 临时验证可给容器添加
securityContext: privileged: true配置,确认是权限问题后切回补充组方案即可,生产环境不建议长期使用特权容器。
内容的提问来源于stack exchange,提问作者Michele
相关产品推荐
相关产品推荐

