
该镜像提供分布式环境下的定时任务调度解决方案,旨在解决单点部署定时任务的可靠性问题,支持多节点协同执行定时任务,确保任务在分布式系统中高效、稳定、可靠地运行。通过分布式架构设计,可避免单点故障导致的任务丢失,适用于各类需要定时执行任务的业务场景。
bashdocker run -d \ --name distributed-task-node \ -e SPRING_DATASOURCE_URL=jdbc:mysql://mysql-host:3306/task_db?useSSL=false \ -e SPRING_DATASOURCE_USERNAME=task_user \ -e SPRING_DATASOURCE_PASSWORD=task_password \ -e TASK_NODE_NAME=node-01 \ -e TASK_REGISTRY_TYPE=redis \ -e REDIS_HOST=redis-host \ -e REDIS_PORT=6379 \ -p 8080:8080 \ --restart=always \ distributed-task:latest
yamlversion: '3.8' services: task-node-1: image: distributed-task:latest container_name: task-node-1 environment: - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/task_db?useSSL=false&serverTimezone=UTC - SPRING_DATASOURCE_USERNAME=root - SPRING_DATASOURCE_PASSWORD=root_password - TASK_NODE_NAME=task-node-1 - TASK_REGISTRY_TYPE=mysql - TASK_LOG_LEVEL=INFO - TASK_RETRY_MAX=3 - TASK_RETRY_INTERVAL=60 ports: - "8080:8080" depends_on: - mysql restart: always task-node-2: image: distributed-task:latest container_name: task-node-2 environment: - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/task_db?useSSL=false&serverTimezone=UTC - SPRING_DATASOURCE_USERNAME=root - SPRING_DATASOURCE_PASSWORD=root_password - TASK_NODE_NAME=task-node-2 - TASK_REGISTRY_TYPE=mysql - TASK_LOG_LEVEL=INFO ports: - "8081:8080" depends_on: - mysql restart: always mysql: image: mysql:8.0 container_name: task-mysql environment: - MYSQL_ROOT_PASSWORD=root_password - MYSQL_DATABASE=task_db volumes: - mysql-data:/var/lib/mysql ports: - "3306:3306" healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 volumes: mysql-data:
| 环境变量键 | 描述 | 默认值 | 是否必填 |
|---|---|---|---|
| SPRING_DATASOURCE_URL | 数据库连接URL(支持MySQL/PostgreSQL) | - | 是 |
| SPRING_DATASOURCE_USERNAME | 数据库用户名 | - | 是 |
| SPRING_DATASOURCE_PASSWORD | 数据库密码 | - | 是 |
| TASK_NODE_NAME | 当前节点唯一标识(分布式环境需确保不同节点名称唯一) | node-${随机字符串} | 否 |
| TASK_REGISTRY_TYPE | 注册中心类型(支持mysql/redis/zookeeper) | mysql | 否 |
| TASK_LOG_LEVEL | 日志输出级别(DEBUG/INFO/WARN/ERROR) | INFO | 否 |
| TASK_RETRY_MAX | 任务失败后最大重试次数 | 3 | 否 |
| TASK_RETRY_INTERVAL | 任务重试间隔(单位:秒) | 60 | 否 |
| TASK_THREAD_POOL_SIZE | 任务执行线程池大小 | 10 | 否 |
| REDIS_HOST | Redis注册中心主机地址(当TASK_REGISTRY_TYPE=redis时必填) | - | 条件必填 |
| REDIS_PORT | Redis注册中心端口 | 6379 | 否 |
| ZOOKEEPER_HOSTS | Zookeeper注册中心地址(当TASK_REGISTRY_TYPE=zookeeper时必填,格式:host1:port1,host2:port2) | - | 条件必填 |
任务需通过配置文件或API注册,支持JSON格式定义,示例如下:
json{ "taskId": "user-stat-report", "taskName": "用户统计报表生成", "cronExpression": "0 0 2 * * ?", // 每日凌晨2点执行 "executorClass": "com.example.tasks.UserStatReportTask", // 任务执行类全路径 "taskParams": "{\"reportType\":\"daily\",\"limit\":1000}", // 任务参数(JSON字符串) "timeout": 1800, // 任务超时时间(单位:秒) "shardingStrategy": "AUTO", // 分片策略(AUTO/ROUND_ROBIN/指定分片键) "maxConcurrent": 3, // 最大并发执行数 "failStrategy": "RETRY" // 失败策略(RETRY/ALERT/IGNORE) }
自定义任务执行类需实现TaskExecutor接口,并重写execute方法,示例:
javapublic class UserStatReportTask implements TaskExecutor { @Override public TaskResult execute(TaskParam param) { // 任务执行逻辑 String reportType = param.getParam("reportType"); int limit = Integer.parseInt(param.getParam("limit")); // ...业务处理... return TaskResult.success("报表生成成功,文件路径:/reports/" + reportType + "_" + System.currentTimeMillis() + ".csv"); } }
INIT_DB=true触发)TASK_NODE_NAME必须唯一,否则会导致任务调度异常TASK_THREAD_POOL_SIZE),避免资源竞争您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。






探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务