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

如何配置Docker容器中Azure DevOps self hosted agents作为服务持续运行

Docker 版 Azure DevOps 自托管代理常驻运行配置方案

问题本质是容器默认没有配置异常退出/宿主机重启后的自动拉起规则,根据部署环境选对应方案即可,不需要修改代理本身的配置。

方案1:配置Docker原生重启策略(最简便,跨平台通用)

这是成本最低的方案,不需要额外安装组件,直接给容器加重启规则即可,优先推荐用unless-stopped策略,完全匹配常驻代理的需求:

  • 几个重启策略的差异注意不要选错:
    • no:默认值,容器退出后不会自动重启,就是你当前的状态
    • on-failure:仅容器以非0错误码退出时才重启,如果代理是正常退出(比如版本升级触发的退出)不会自动拉起,不适合CI代理场景
    • always:无论容器因为什么原因退出都会自动重启,哪怕你手动执行docker stop停掉容器,只要Docker服务重启就会强制把容器拉起来,容易出现停代理维护时容器误启动的问题
    • unless-stopped:容器异常退出、Docker服务重启、宿主机重启时都会自动拉起容器,只有你手动执行stop命令主动停掉的容器不会自动启动,是最适合代理场景的策略

如果还没创建容器,直接在docker run启动命令里加参数即可:

docker run -d --restart unless-stopped <你原本配置的其他参数,比如环境变量、卷挂载、代理镜像名>

如果容器已经创建并运行过,不需要删除重建,直接更新现有容器的重启策略即可:

docker update --restart unless-stopped <你的容器ID或者容器名称>

配置完可以手动重启下Docker服务或者宿主机,执行docker ps确认容器自动启动,再到Azure DevOps代理池确认代理状态为在线即可。

方案2:宿主机系统服务托管(稳定性更高,适合生产环境)

如果对代理可用性要求更高,担心Docker服务本身启动异常导致代理拉不起来,可以直接用宿主机的服务管理器托管容器生命周期,比Docker原生重启策略的管控粒度更细。

Linux 环境(Systemd 体系,覆盖绝大多数主流服务器发行版)

操作步骤:

  1. 先停掉当前手动启动的代理容器,关闭原有重启策略避免冲突:
docker stop <你的代理容器ID/名称>
docker update --restart no <你的代理容器ID/名称>
  1. 创建systemd服务配置文件:
sudo vi /etc/systemd/system/azure-devops-agent.service

写入以下配置,注意替换成你自己的容器名和启动参数:

[Unit]
Description=Azure DevOps Self-Hosted Docker Agent
After=docker.service network-online.target
Wants=network-online.target
Requires=docker.service

[Service]
Type=simple
# 启动前清理残留的同名旧容器,避免启动报错
ExecStartPre=-/usr/bin/docker rm -f azdo-agent
# 替换成你自己的docker run完整启动命令,不要加-d参数,让systemd接管容器进程
ExecStart=/usr/bin/docker run --name azdo-agent <你的所有启动参数、代理镜像名>
# 停止容器时留30秒缓冲,让代理处理完正在运行的作业再退出,避免任务异常中断
ExecStop=/usr/bin/docker stop -t 30 azdo-agent
Restart=always
RestartSec=10
StartLimitIntervalSec=60

[Install]
WantedBy=multi-user.target
  1. 重载systemd配置,设置服务开机自启并立即启动:
sudo systemctl daemon-reload
sudo systemctl enable --now azure-devops-agent.service
  1. 验证服务状态:
sudo systemctl status azure-devops-agent.service

显示active (running)即为配置成功,后续容器崩溃、Docker服务重启、宿主机重启都会自动拉起代理。

Windows 环境

如果是测试场景,直接用方案1的--restart unless-stopped参数就能满足需求;生产环境可以用NSSM将容器启动脚本注册为Windows服务,配置服务失败自动重启、开机自启即可。


踩坑提醒

  • 启动容器不要加--rm参数,否则容器退出后会被自动删除,重启策略完全不生效
  • 代理的工作目录、认证凭据一定要通过Docker卷挂载到宿主机存储,否则容器重建后会丢失配置,每次重启都要重新注册代理,还会在代理池里产生大量无用的离线代理记录
  • 配置完成后一定要模拟异常场景验证:手动kill代理进程、重启Docker服务、重启宿主机,确认代理可以自动恢复上线,不要等跑流水线的时候才发现自启配置失效
  • 如果代理部署在云服务器上,记得关闭云主机的自动休眠、定时关机策略,宿主机本身关机的话上层的容器自启配置不会生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:48:30