You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AKS Pod部署的Azure Pipelines自托管代理中无法使用容器的咨询

问题解答

这并非必须接受的限制,AKS完全可以用来托管Azure DevOps自托管构建代理,针对你遇到的容器特性初始化报错问题,有以下几种可行的解决思路:

原因说明

Azure Pipelines的容器作业特性需要代理环境中能访问Docker守护进程,但AKS集群的节点容器运行时(默认是containerd)由集群管控,且默认的自托管代理Pod没有权限访问节点上的容器运行时socket,因此会触发"docker不可访问/未安装"的错误。

解决方法

1. 让代理Pod访问节点的容器运行时socket

如果坚持使用Azure Pipelines的容器作业特性,可以通过挂载节点的容器运行时socket到代理Pod中,让代理容器内的进程能调用节点的容器运行时:

  • 针对containerd(AKS默认):在代理的Deployment配置中添加以下卷挂载:
    volumes:
    - name: containerd-sock
      hostPath:
        path: /run/containerd/containerd.sock
    volumeMounts:
    - name: containerd-sock
      mountPath: /run/containerd/containerd.sock
    
    同时在代理容器内安装docker-cli,并设置环境变量DOCKER_HOST=unix:///run/containerd/containerd.sock,让Docker CLI指向containerd的socket。
  • 针对Docker运行时(旧版AKS):挂载节点的/var/run/docker.sock到代理容器的同路径即可。

    注意:这种方式会赋予代理Pod控制节点容器运行时的权限,存在一定安全风险,需严格控制代理Pod的权限和访问范围。

2. 使用Azure Pipelines原生Kubernetes作业模式

放弃传统的容器作业特性,改用Azure Pipelines的Kubernetes作业任务直接在AKS集群中调度独立Pod运行流水线作业。这种方式完全基于Kubernetes原生调度能力,不需要代理环境中的Docker,更贴合AKS的运行模式,且安全性更高,是生产环境的推荐方案。

3. 采用Docker-in-Docker(DinD)代理镜像

构建包含Docker-in-Docker环境的自托管代理镜像,在代理Pod内部运行独立的Docker守护进程。需要在Pod配置中开启特权模式(privileged: true),同时映射相关端口和存储卷。这种方式适合测试场景,但由于特权模式和额外的资源消耗,不建议在生产环境中使用。

内容的提问来源于stack exchange,提问作者Marko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:52:33