Ot Aiops
支持多协议工业设备数据采集与智能诊断,具备高风险写入防护机制。
通过docker-socket-proxy安全管理Docker容器状态、日志与重启。
openclaw skills install @elston/docker-ops命令、参数、文件名以原文为准
通过 docker-socket-proxy 管理 Docker 容器:状态报告、日志分析和重启操作。
docker CLI 已在 PATH 中可用jq 已在 PATH 中可用DOCKER_HOST 环境变量已预先配置(不要手动覆盖)whitelist.yml 文件在执行任何 Docker 命令前,必须检查 SYSCTL_WHITELIST_PATH 环境变量。
**如果 SYSCTL_WHITELIST_PATH 未设置或为空:**
SYSCTL_WHITELIST_PATH 未配置。请在容器中设置该环境变量,指向白名单 YAML 文件路径。"如果已设置: 从该路径读取白名单文件。不提供默认文件或回退机制。
白名单文件结构如下:
containers:
- name: container_name
description: "人类可读的描述"
can_restart: true|false规则:
can_restart: false 的容器<name> 不在白名单中。可用容器列表: <list>"仅允许使用以下 Docker 命令:
| 命令 | 使用场景 |
|---|---|
docker ps --format json | 列出正在运行的容器 |
docker ps -a --format json | 列出所有容器(包括已停止) |
docker inspect <name> | 获取容器详细信息(状态、启动时间、重启次数) |
docker stats --no-stream --format json <name> | 获取资源使用情况(CPU、内存、网络、磁盘) |
docker logs --since <period> --tail 500 <name> | 读取容器日志 |
docker restart <name> | 重启容器(仅限明确请求时使用) |
绝对禁止执行以下命令:
docker rm, docker stop, docker kill, docker exec, docker run, docker pull, docker build, docker push, docker network, docker volume, docker image, docker system, docker compose
当用户请求状态报告时,请按以下步骤执行:
将用户输入的时间描述转换为 --since 参数值:
1h24h30m168h1h168h(7天)。若用户请求更长时间,则截断至 168h 并告知用户。所有 docker 命令必须使用 timeout 30 包裹,防止命令挂起。
# 状态 + 启动时间 + 重启次数
timeout 30 docker inspect <name> | jq '.[0] | {Status: .State.Status, StartedAt: .State.StartedAt, RestartCount: .RestartCount, Health: .State.Health.Status}'
# 资源使用情况
timeout 30 docker stats --no-stream --format '{{json .}}' <name>
# 获取日志(最多 5000 行,用于分析)
LOG_OUTPUT=$(timeout 30 docker logs --since <period> --tail 5000 <name> 2>&1)
# 错误与警告数量统计(快速分析)
echo "${LOG_OUTPUT}" | grep -ci 'error\|exception\|fatal\|traceback'
echo "${LOG_OUTPUT}" | grep -ci 'warn'
# 最近的错误(最多 10 条唯一记录)
echo "${LOG_OUTPUT}" | grep -i 'error\|exception\|fatal\|traceback' | sort -u | tail -10在向用户展示日志片段前,需对敏感信息进行屏蔽:
检测到上述内容后,替换为 [REDACTED]。
使用以下模板(根据请求语言调整):
<status_emoji> **<container_name>**
**状态:** `running`(运行时长:2d 5h 13m)
**重启次数:** 0
**CPU:** 2.3% | **内存:** 145MiB / 512MiB(28%)
**网络 I/O:** 1.2MB / 340KB | **磁盘 I/O:** 12MB / 5MB
**最近一小时日志摘要:**
- 🔴 错误数:3
- ⚠️ 警告数:12
**最近出现的错误:**
• `ConnectionRefusedError: connect to postgres:5432`
• `TimeoutError: request took >30s`
**建议:** 检查对 PostgreSQL 的访问权限状态图标规则:
当用户要求重启容器时,请按以下步骤操作:
can_restart: true [AUDIT] <ISO-timestamp> restart <container_name> requested_by=<user_id_if_available>timeout 30 docker restart <name> for i in 1 2 3; do
sleep 10
STATUS=$(timeout 30 docker inspect <name> | jq -r '.[0].State.Status')
if [ "${STATUS}" = "running" ]; then break; fi
done timeout 30 docker logs --tail 20 <name> 2>&1
当用户要求查看日志时:
--tail 500 限制输出量grep 实现docker logs 时始终使用 2>&1,因为错误输出(stderr)可能包含实际日志内容DOCKER_HOST 未设置,不得猜测地址 —— 应提示用户:"DOCKER_HOST 未配置。请设置此环境变量以指向 docker-socket-proxy 端点。"已收录 1 个 Skill