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

如何在基于AKS的VSTS代理中配置环境并运行Docker命令?

AKS上Azure DevOps自托管代理配置解决方案

我们已按照微软文档将自托管代理部署到Azure DevOps代理池,且可在代理上执行流水线,使用的Dockerfile如下:

FROM ubuntu:18.04

# To make it easier for build and release pipelines to run apt-get,
# configure apt to not require confirmation (assume the -y argument by default)
ENV DEBIAN_FRONTEND=noninteractive
RUN echo "APT::Get::Assume-Yes \"true\";" > /etc/apt/apt.conf.d/90assumeyes

RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates \
    curl \
    jq \
    git \
    iputils-ping \
    libcurl4 \
    libicu60 \
    libunwind8 \
    netcat \
    libssl1.0 \
    maven \
    python \
    python3 \
    docker \
  && rm -rf /var/lib/apt/lists/*

RUN curl -LsS https://aka.ms/InstallAzureCLIDeb | bash \
  && rm -rf /var/lib/apt/lists/*

# Can be 'linux-x64', 'linux-arm64', 'linux-arm', 'rhel.6-x64'.
ENV TARGETARCH=linux-x64

WORKDIR /azp

COPY ./vstsagent/ .
COPY ./start.sh .
RUN chmod +x start.sh

ENTRYPOINT ["./start.sh"]

针对以下两个疑问,提供具体解决方案:

1. 配置Maven、Java目录及各类自定义配置文件

Maven与Java环境配置

  • 设置环境变量:Ubuntu 18.04安装Maven时会默认安装OpenJDK,若需指定Java版本,可先安装对应JDK,再在Dockerfile中添加环境变量:
    # 安装指定版本OpenJDK(以11为例)
    RUN apt-get install -y openjdk-11-jdk
    ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
    ENV PATH=$JAVA_HOME/bin:$PATH
    # 设置Maven环境变量
    ENV MAVEN_HOME=/usr/share/maven
    ENV PATH=$MAVEN_HOME/bin:$PATH
    
  • 自定义Maven settings.xml:将本地的settings.xml拷贝至容器内的Maven配置目录,在Dockerfile中添加:
    # 拷贝自定义settings.xml到用户目录下的.m2文件夹
    COPY ./settings.xml /root/.m2/settings.xml
    
    若需全局生效,可拷贝至/usr/share/maven/conf/settings.xml。

Node.js配置

  • 安装Node.js:推荐使用nvm管理版本,在Dockerfile中添加:
    # 安装nvm
    RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
    # 安装指定版本Node(以20为例)
    RUN export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && nvm install 20
    
  • 自定义npm配置:将本地的.npmrc拷贝至容器用户根目录:
    COPY ./.npmrc /root/.npmrc
    

Gradle配置

  • 安装Gradle:可通过下载二进制包安装指定版本,在Dockerfile中添加:
    # 下载并解压Gradle(以8.5为例)
    RUN curl -L https://services.gradle.org/distributions/gradle-8.5-bin.zip -o gradle.zip && unzip gradle.zip -d /opt && rm gradle.zip
    ENV GRADLE_HOME=/opt/gradle-8.5
    ENV PATH=$GRADLE_HOME/bin:$PATH
    
  • 自定义Gradle配置:将本地的gradle.properties或init.gradle拷贝至容器用户的.gradle目录:
    COPY ./gradle.properties /root/.gradle/gradle.properties
    

2. 修复Docker安装并执行Docker流水线任务

问题原因

Ubuntu 18.04官方源中的docker包为旧版本的Docker.io,并非官方Docker引擎,导致安装后无法正常使用。

修复Docker安装

修改Dockerfile中的Docker安装步骤,替换为官方Docker引擎安装命令:

# 先安装Docker依赖工具
RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates \
    curl \
    jq \
    git \
    iputils-ping \
    libcurl4 \
    libicu60 \
    libunwind8 \
    netcat \
    libssl1.0 \
    maven \
    python \
    python3 \
    gnupg \
    lsb-release \
  && rm -rf /var/lib/apt/lists/*

# 添加Docker官方GPG密钥与源
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
RUN echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker引擎、CLI与containerd
RUN apt-get update && apt-get install -y docker-ce docker-ce-cli containerd.io \
  && rm -rf /var/lib/apt/lists/*

执行Docker流水线任务

在AKS中运行Docker任务,推荐挂载宿主机的Docker Socket(无需特权模式,性能更优):

  1. 在代理的Deployment YAML中添加Volume与挂载配置:
    volumes:
      - name: docker-socket
        hostPath:
          path: /var/run/docker.sock
    containers:
      - name: azp-agent
        volumeMounts:
          - name: docker-socket
            mountPath: /var/run/docker.sock
    
  2. 重新部署代理后,即可在流水线中使用Docker任务执行镜像构建、推送等操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:45:29