Drone 0.8构建任务卡在Pending状态问题求助
解决Drone 0.8在Docker Swarm部署后任务卡在Pending的问题
你好,针对你遇到的「Drone 0.8通过Swarm Stack部署后,前两个构建任务正常执行,后续全部卡在pending」的问题,结合Drone 0.8的特性和Swarm部署的常见坑,我整理了几个优先级从高到低的排查方向和解决方法:
1. 补全Drone Swarm模式核心配置
Drone 0.8在Swarm环境下运行时,必须明确开启Swarm调度支持,否则默认的单节点Runner并行任务上限就是2个——这刚好对应你前两个任务成功、后续卡住的现象。
排查点:
你的server服务配置里,是否缺少以下关键环境变量?
DRONE_SWARM=true:让Drone使用Swarm原生调度能力分配任务DRONE_AGENTS_MAX:设置允许的最大并行构建任务数(默认值为2)
修复操作:
更新你的stack配置文件,给server服务添加这些环境变量:
services: server: # 保留你原有的镜像、端口、挂载配置... environment: # 保留你原来的DRONE_OPEN、DRONE_HOST等变量... - DRONE_SWARM=true - DRONE_AGENTS_ENABLED=true - DRONE_AGENTS_MAX=8 # 根据你的集群资源调整,比如设为4或8
更新后重新部署:
docker stack deploy -c your-drone-stack.yml drone
2. 检查Swarm集群资源是否耗尽
如果Swarm所有节点的CPU、内存都被占满,Docker无法调度新容器,就会导致Drone任务卡在pending状态。
排查步骤:
- 查看所有Swarm节点状态,确保没有节点离线:
docker node ls
- 查看单个节点的运行任务,检查资源占用:
docker node ps <你的节点ID>
- 实时监控容器资源使用情况:
docker stats
修复建议:
- 如果节点资源不足,要么扩容Swarm集群,要么清理闲置容器释放资源
- 给Drone服务设置资源限制,避免占用过多集群资源:
server: # 其他配置... deploy: resources: limits: cpus: '0.5' memory: 512M reservations: cpus: '0.25' memory: 256M
3. 检查Drone SQLite数据库状态
你挂载了/data/local/drone目录,Drone 0.8默认用SQLite存储任务数据,如果数据库文件锁死或者损坏,会导致任务队列无法正常推进。
排查步骤:
- 查看Drone Server日志,寻找数据库相关报错:
docker exec -it $(docker ps -qf "name=drone_server") tail -f /var/log/drone/drone.log
重点关注是否有database is locked或corrupt database这类信息。
2. 检查挂载目录权限,确保Drone容器能读写:
ls -l /data/local/drone/
Drone默认用UID/GID为1000的用户运行,需确保该目录权限对该用户开放。
修复建议:
- 如果是数据库锁问题:先停止Drone服务,删除
/data/local/drone/drone.sqlite-journal文件,再重启服务 - 如果数据库损坏:用SQLite自带命令检查修复:
sqlite3 /data/local/drone/drone.sqlite "PRAGMA integrity_check;"
若修复无效,只能备份现有数据后删除数据库文件,让Drone重建。
4. 重置Drone任务队列
如果前面的排查都没问题,可能是任务队列出现了异常堆积。
修复操作:
- 先在Drone Web UI里手动取消几个pending的任务,观察是否有新任务能启动
- 强制重启Drone Server服务,重置队列:
docker service update drone_server --force
建议优先从第一个配置问题入手,这大概率是你遇到的核心原因——毕竟默认并行数刚好是2,完美匹配你前两个任务成功的现象。
内容的提问来源于stack exchange,提问作者Iman
相关产品推荐
相关产品推荐

