A lightweight, self-hosted Azure DevOps agent based on Linux.
816
A lightweight, self-hosted Azure DevOps build agent based on Linux ā available across multiple distributions and variants:
| Tag prefix | Base | libicu | Description |
|---|---|---|---|
trixie-* | debian:trixie-slim | 76 | Debian-based build |
noble-* | ubuntu:noble (24.04 LTS) | 74 | Ubuntu-based build |
rhel-* | redhat/ubi10-minimal (RHEL 10) | 74 | RHEL-based build |
Note: These images are intentionally minimal ā they include only what is required to run the Azure DevOps agent (
git,curl,ca-certificates, and .NET runtime libraries). No Python, Node.js, or other build tools are pre-installed. See Extending the imageā below.
Launch the agent with automatic restart:
docker run -d \
--name doa-agent-prod \
--restart unless-stopped \
-e DO_URL="https://dev.azure.com/your-organization" \
-e DO_PAT="your_personal_access_token" \
-e DO_POOL="your_pool_name" \
-e DO_AGENT_NAME="DOA-Agent" \
karfee111/do-agent:trixie-latest
docker run -d \
--name doa-agent-prod \
--restart unless-stopped \
-e DO_URL="https://dev.azure.com/your-organization" \
-e DO_PAT="your_personal_access_token" \
-e DO_POOL="your_pool_name" \
-e DO_AGENT_NAME="DOA-Agent" \
karfee111/do-agent:noble-latest
docker run -d \
--name doa-agent-prod \
--restart unless-stopped \
-e DO_URL="https://dev.azure.com/your-organization" \
-e DO_PAT="your_personal_access_token" \
-e DO_POOL="your_pool_name" \
-e DO_AGENT_NAME="DOA-Agent" \
karfee111/do-agent:rhel-latest
Monitor startup logs and registration:
docker logs -f doa-agent-prod
The container automatically configures and registers the agent at boot using these environment variables:
| Variable | Description | Default | Required |
|---|---|---|---|
DO_URL | Full URL of your Azure DevOps organization | ā | ā |
DO_PAT | Personal Access Token with Agent Pools (Read & Manage) scope | ā | ā |
DO_POOL | Name of the target agent pool | Default | ā |
DO_AGENT_NAME | Display name in the Azure DevOps panel | DOA-Agent-$(hostname) | ā |
To ensure accurate container health monitoring without adding unnecessary overhead or packages, the native Linux /proc filesystem virtual directory is used to safely track the core Agent.Listener lifecycle. A start_period of 3 minutes is recommended to allow the ./start.sh entrypoint script to safely download updates and register with Azure DevOps before monitoring begins.
To deploy with health monitoring via CLI:
docker run -d \
--name doa-agent-prod \
--restart unless-stopped \
-e DO_URL="https://dev.azure.com/your-organization" \
-e DO_PAT="your_personal_access_token" \
-e DO_POOL="your_pool_name" \
-e DO_AGENT_NAME="DOA-Agent" \
--health-cmd='grep -aq "Agent.Listener" /proc/[0-9]*/cmdline || exit 1' \
--health-interval=45s \
--health-timeout=10s \
--health-retries=4 \
--health-start-period=180s \
karfee111/do-agent:noble-latest
services:
azure-agent:
image: karfee111/do-agent:noble-latest
container_name: doa-agent-prod
restart: unless-stopped
environment:
- DO_URL=https://dev.azure.com/your-organization
- DO_PAT=your_personal_access_token
- DO_POOL=your_pool_name
- DO_AGENT_NAME=DOA-Agent
healthcheck:
test: ["CMD-SHELL", "grep -aq 'Agent.Listener' /proc/[0-9]*/cmdline || exit 1"]
interval: 45s
timeout: 10s
retries: 4
start_period: 180s
docker compose up -d
Variants: replace the tag with
trixie-latestfor Debian 13, orrhel-latestto use the RHEL 10 based image.
This image forwards extra arguments directly to Microsoft's native run.sh. For example, to run a single job and exit:
docker run -d \
--name doa-agent-once \
-e DO_URL="https://dev.azure.com/your-organization" \
-e DO_PAT="your_personal_access_token" \
-e DO_POOL="your_pool_name" \
-e DO_AGENT_NAME="DOA-Agent" \
karfee111/do-agent:trixie-latest --once
RHEL variant note: If you extend the
rhel-latestimage, remember that UBI Minimal usesmicrodnfas its package manager instead ofapt(e.g.,RUN microdnf install -y python3 && microdnf clean all).
These images ship with the bare minimum to run the agent. If your pipelines require additional tools (Python, Node.js, .NET SDK, etc.), extend the image with your own Dockerfile:
FROM karfee111/do-agent:trixie-latest
USER root
RUN apt-get update && apt-get install -y --no-install-recommends \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
USER agent
Alternatively, you can override the entrypoint at runtime to install packages or run setup commands dynamically before the agent starts.
ā ļø Important: When overriding the entrypoint, you must end your execution chain with exec ./start.sh.
Via Docker Run:
docker run -d \
--name doa-agent-prod \
--restart unless-stopped \
-e DO_URL="https://dev.azure.com/your-organization" \
-e DO_PAT="your_personal_access_token" \
-e DO_POOL="your_pool_name" \
-e DO_AGENT_NAME="DOA-Agent" \
--entrypoint /bin/bash \
karfee111/do-agent:trixie-latest \
-c "apt-get update && apt-get install -y --no-install-recommends python3 && ln -sf /usr/bin/python3 /usr/bin/python && exec ./start.sh"
Via Docker Compose:
services:
azure-agent:
image: karfee111/do-agent:trixie-latest
restart: unless-stopped
entrypoint: >
/bin/bash -c "
apt-get update &&
apt-get install -y --no-install-recommends python3 &&
ln -sf /usr/bin/python3 /usr/bin/python &&
exec ./start.sh
"
environment:
- DO_URL=https://dev.azure.com/your-organization
- DO_PAT=your_personal_access_token
- DO_POOL=your_pool_name
- DO_AGENT_NAME=DOA-Agent
Tip: For production use, prefer extending via Dockerfile rather than runtime installation ā it keeps startup fast, independent of external package mirrors, and fully reproducible.
trixie-{agent_version}.{build_number} # Debian Trixie
noble-{agent_version}.{build_number} # Ubuntu 24.04 LTS
rhel-{agent_version}.{build_number} # RHEL 10 UBI Minimal
Examples: trixie-5.275.0.1, noble-5.275.0.1, rhel-5.275.0.1
latest Tags| Tag | Points to |
|---|---|
trixie-latest | most recent trixie-* build |
noble-latest | most recent noble-* build |
rhel-latest | most recent rhel-* build |
latest | global alias pointing to the most recent noble-* build |
Content type
Image
Digest
sha256:4ccd54affā¦
Size
70.6 MB
Last updated
23 days ago
docker pull karfee111/do-agent