| name | isrvd-ops |
| description | 通过 isrvd API 进行容器部署、服务管理、镜像操作、路由配置、文件管理等运维操作。当用户要求"部署服务"、"管理容器"、"拉取/推送镜像"、"配置路由"、"管理 Swarm"、"Compose 部署"、"文件管理"、"Web 终端"等运维任务时使用此 Skill。 |
isrvd 运维 Skill
source ./scripts/api.sh
isrvd_token "$ISRVD_APIURL" "$ISRVD_APITOKEN"
调用:isrvd_get "/path" / isrvd_post "/path" '{body}',输出紧凑 JSON(数组自动转表格)。按需用 jq 自行处理返回值。
⚠️ 操作规范(必须遵守):
- 禁止硬编码:不要假设任何 IP、端口、路径、容器名——全部通过 API 查询或环境变量获取
- 禁止 base64:不要用 base64 编码内容写入文件,使用
isrvd_post "/filer/modify" 或 isrvd_upload
- filer 路径 ≠ 宿主机路径:volume mount 的 hostPath 必须是宿主机真实路径,先通过 inspect isrvd 容器确认映射关系,见 docs/system/filer.md
- 不要重复重建容器:静态文件更新直接写 filer 即可,容器无需重建;只有初次部署或更换镜像时才需要重建
API 文档索引(按需读取,勿全部加载)
Docker
Swarm
Compose
APISIX
系统
决策树
用户需求
├── 部署/创建
│ ├── 单个容器 → docs/docker/containers.md
│ ├── 多容器应用(单机) → docs/compose.md §1
│ ├── 集群服务(Stack) → docs/compose.md §2
│ ├── 集群服务(单服务) → docs/swarm/services.md
│ └── 配置路由 → docs/apisix/routes.md
│
├── 更新/变更
│ ├── 更新容器镜像 → docs/docker/images.md (拉取) + docs/docker/containers.md (重建)
│ ├── 扩缩容 → docs/swarm/services.md
│ ├── 重新部署 → docs/swarm/services.md (force-update)
│ ├── 修改路由/上游 → docs/apisix/routes.md 或 docs/apisix/upstreams.md
│ └── 修改系统配置 → docs/system/config.md
│
├── 查询/监控
│ ├── 容器/镜像/网络/卷 → docs/docker/ 下对应文件
│ ├── 集群/服务/任务 → docs/swarm/ 下对应文件
│ ├── 路由/上游/插件 → docs/apisix/ 下对应文件
│ ├── 系统状态 → docs/system/overview.md
│ ├── 日志 → docs/docker/containers.md 或 docs/swarm/services.md
│ └── 文件管理 → docs/system/filer.md
│
├── 删除/清理
│ ├── 容器/镜像/网络/卷 → docs/docker/ 下对应文件(action=remove)
│ ├── Swarm 服务 → docs/swarm/services.md(action=remove)
│ └── 路由/消费者 → docs/apisix/routes.md 或 docs/apisix/consumers.md
│
└── 管理
├── 镜像仓库 → docs/docker/registries.md
├── 成员/权限/Token → docs/system/account.md
├── 文件管理 → docs/system/filer.md
└── Web 终端 → GET /api/shell (WebSocket)
常见工作流
以下示例中的路径、IP、端口、容器名等仅为格式参考,实际值必须通过 API 查询获取。
健康检查
isrvd_get "/overview/probe"
isrvd_get "/overview/status"
isrvd_get "/docker/containers"
isrvd_get "/swarm/services"
拉取镜像并创建容器
isrvd_post "/docker/image/pull" '{"image":"<IMAGE>"}'
isrvd_post "/docker/container" '{"image":"<IMAGE>","name":"<NAME>","ports":{"<HOST_PORT>":"<CONTAINER_PORT>"},"restart":"unless-stopped"}'
isrvd_get "/docker/containers"
更新容器镜像
CID=<CONTAINER_ID>
isrvd_post "/docker/image/pull" '{"image":"<NEW_IMAGE>"}'
isrvd_post "/docker/container/$CID/action" '{"action":"stop"}'
isrvd_post "/docker/container/$CID/action" '{"action":"remove"}'
isrvd_post "/docker/container" '{"image":"<NEW_IMAGE>","name":"<NAME>","ports":{"<HOST_PORT>":"<CONTAINER_PORT>"},"restart":"unless-stopped"}'
Compose 部署
isrvd_post "/compose/docker/deploy" "{\"projectName\":\"<PROJECT>\",\"content\":$(cat docker-compose.yml | jq -sR)}"
部署 Swarm 服务并验证
isrvd_post "/swarm/service" '{"name":"<NAME>","image":"<IMAGE>","replicas":<N>,"ports":[{"targetPort":<PORT>,"publishedPort":<PORT>}]}'
isrvd_get "/swarm/services"
扩缩容
isrvd_post "/swarm/service/<SVC_ID>/action" '{"action":"scale","replicas":<N>}'
滚动更新
isrvd_post "/swarm/service/<SVC_ID>/force-update"
为新服务配置路由
isrvd_get "/apisix/routes"
isrvd_post "/apisix/route" '{"name":"<NAME>","uri":"<URI>","status":1,"upstream":{"type":"roundrobin","nodes":{"<HOST>:<PORT>":1}}}'
临时禁用/启用路由
isrvd_patch "/apisix/route/<ROUTE_ID>/status" '{"status":0}'
isrvd_patch "/apisix/route/<ROUTE_ID>/status" '{"status":1}'
更新静态文件(无需重建容器)
直接写 filer,已挂载该目录的容器立即生效:
isrvd_post "/filer/list" '{"path":"/"}'
isrvd_post "/filer/modify" '{"path":"<FILER_PATH>/<FILE>","content":"..."}'
cat > /tmp/<FILE> << 'EOF'
...内容...
EOF
isrvd_upload "/filer/upload" "file" "/tmp/<FILE>" "path=<FILER_PATH>"
filer 路径是 isrvd 内部路径,非宿主机路径。初次创建容器挂载卷时,需先查出宿主机真实路径(见 docs/system/filer.md),之后文件更新不再需要重建容器。
其他文件操作
isrvd_post "/filer/list" '{"path":"<DIR>"}'
isrvd_post "/filer/read" '{"path":"<FILE>"}' '.content'
isrvd_post "/filer/modify" '{"path":"<FILE>","content":"<CONTENT>"}'
isrvd_upload "/filer/upload" "file" "<LOCAL_FILE>" "path=<FILER_DIR>"