arcane-docker-managerManage Docker containers, stacks, templates, images, networks, volumes, users, and monitor system resources via the Arcane Docker Management API.
Install via ClawdBot CLI:
clawdbot install cougz/arcane-docker-managerThis skill enables you to interact with your Arcane Docker Management API to manage Docker containers, compose stacks, templates, networks, volumes, images, and system monitoring. Arcane is a comprehensive Docker management platform with a REST API.
Use this skill when the user requests any of the following:
The API base URL should be configured by the user. Default: http://localhost:3552/api
Arcane supports two authentication methods:
X-API-Key header```bash
curl -X POST "$BASE_URL/auth/login" \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"password": "your_password"
}'
```
Response includes token, refreshToken, and expiresAt.
API keys can be created and managed through the /apikeys endpoints. Use the X-API-Key header for authentication.
```bash
curl -X GET "$BASE_URL/containers" \
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/containers?status=running" \
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/containers?search=nginx" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X POST "$BASE_URL/containers/{id}/start" \
-H "Authorization: Bearer $TOKEN"
curl -X POST "$BASE_URL/containers/{id}/stop" \
-H "Authorization: Bearer $TOKEN"
curl -X POST "$BASE_URL/containers/{id}/restart" \
-H "Authorization: Bearer $TOKEN"
curl -X DELETE "$BASE_URL/containers/{id}" \
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/containers/{id}" \
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/containers/{id}/logs?tail=100" \
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/containers/{id}/stats" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X POST "$BASE_URL/containers/{id}/exec" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"command": ["ls", "-la"],
"workingDir": "/app"
}'
curl -X POST "$BASE_URL/containers/{id}/rename" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "new-container-name"
}'
curl -X POST "$BASE_URL/containers/{id}/update" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"cpuShares": 512,
"memory": 536870912,
"restartPolicy": "unless-stopped"
}'
```
```bash
curl -X GET "$BASE_URL/stacks" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X POST "$BASE_URL/stacks" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my-stack",
"templateId": "template-id",
"envVars": {
"PORT": "8080",
"DATABASE_URL": "postgres://..."
}
}'
```
```bash
curl -X POST "$BASE_URL/stacks" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my-stack",
"composeContent": "version: \"3.8\"\nservices:\n web:\n image: nginx:latest\n ports:\n - \"80:80\""
}'
```
```bash
curl -X GET "$BASE_URL/stacks/{id}" \
-H "Authorization: Bearer $TOKEN"
curl -X PUT "$BASE_URL/stacks/{id}" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"envVars": {
"PORT": "9090"
}
}'
curl -X DELETE "$BASE_URL/stacks/{id}" \
-H "Authorization: Bearer $TOKEN"
curl -X POST "$BASE_URL/stacks/{id}/start" \
-H "Authorization: Bearer $TOKEN"
curl -X POST "$BASE_URL/stacks/{id}/stop" \
-H "Authorization: Bearer $TOKEN"
curl -X POST "$BASE_URL/stacks/{id}/restart" \
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/stacks/{id}/logs?tail=100" \
-H "Authorization: Bearer $TOKEN"
curl -X POST "$BASE_URL/stacks/{id}/pull" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X GET "$BASE_URL/templates" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X POST "$BASE_URL/templates" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "nginx-template",
"description": "Basic nginx web server",
"content": "version: \"3.8\"\nservices:\n web:\n image: nginx:{{VERSION}}\n ports:\n - \"{{PORT}}:80\"",
"variables": [
{
"name": "VERSION",
"description": "Nginx version",
"defaultValue": "latest"
},
{
"name": "PORT",
"description": "Host port",
"defaultValue": "80"
}
],
"category": "web-servers",
"tags": ["nginx", "web"]
}'
```
```bash
curl -X GET "$BASE_URL/templates/{id}" \
-H "Authorization: Bearer $TOKEN"
curl -X PUT "$BASE_URL/templates/{id}" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "updated-template-name",
"description": "Updated description"
}'
curl -X DELETE "$BASE_URL/templates/{id}" \
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/templates/{id}/content" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X GET "$BASE_URL/templates/global-variables" \
-H "Authorization: Bearer $TOKEN"
curl -X PUT "$BASE_URL/templates/global-variables" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"GLOBAL_DOMAIN": "example.com",
"GLOBAL_NETWORK": "traefik-public"
}'
```
```bash
curl -X GET "$BASE_URL/images" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X POST "$BASE_URL/images/pull" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"image": "nginx:latest"
}'
```
```bash
curl -X GET "$BASE_URL/images/{id}" \
-H "Authorization: Bearer $TOKEN"
curl -X DELETE "$BASE_URL/images/{id}" \
-H "Authorization: Bearer $TOKEN"
curl -X POST "$BASE_URL/images/prune" \
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/images/search?term=nginx" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X GET "$BASE_URL/networks" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X POST "$BASE_URL/networks" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my-network",
"driver": "bridge",
"internal": false,
"attachable": true
}'
```
```bash
curl -X GET "$BASE_URL/networks/{id}" \
-H "Authorization: Bearer $TOKEN"
curl -X DELETE "$BASE_URL/networks/{id}" \
-H "Authorization: Bearer $TOKEN"
curl -X POST "$BASE_URL/networks/{id}/connect" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"containerId": "container-id"
}'
curl -X POST "$BASE_URL/networks/{id}/disconnect" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"containerId": "container-id"
}'
curl -X POST "$BASE_URL/networks/prune" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X GET "$BASE_URL/volumes" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X POST "$BASE_URL/volumes" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my-volume",
"driver": "local",
"labels": {
"project": "my-app"
}
}'
```
```bash
curl -X GET "$BASE_URL/volumes/{name}" \
-H "Authorization: Bearer $TOKEN"
curl -X DELETE "$BASE_URL/volumes/{name}" \
-H "Authorization: Bearer $TOKEN"
curl -X POST "$BASE_URL/volumes/prune" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X GET "$BASE_URL/system/info" \
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/system/version" \
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/system/stats" \
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/system/df" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X GET "$BASE_URL/system/events" \
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/system/events?since=1609459200&type=container" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X GET "$BASE_URL/users" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X POST "$BASE_URL/users" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"username": "newuser",
"email": "user@example.com",
"password": "securepassword123",
"role": "user"
}'
```
```bash
curl -X GET "$BASE_URL/users/{userId}" \
-H "Authorization: Bearer $TOKEN"
curl -X PUT "$BASE_URL/users/{userId}" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "newemail@example.com",
"role": "admin"
}'
curl -X DELETE "$BASE_URL/users/{userId}" \
-H "Authorization: Bearer $TOKEN"
curl -X PUT "$BASE_URL/auth/password" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"currentPassword": "oldpassword",
"newPassword": "newpassword123"
}'
```
```bash
curl -X GET "$BASE_URL/apikeys" \
-H "Authorization: Bearer $TOKEN"
```
```bash
curl -X POST "$BASE_URL/apikeys" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "CI/CD Pipeline Key",
"description": "API key for automated deployments",
"expiresAt": "2025-12-31T23:59:59Z"
}'
```
```bash
curl -X GET "$BASE_URL/apikeys/{id}" \
-H "Authorization: Bearer $TOKEN"
curl -X PUT "$BASE_URL/apikeys/{id}" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Updated Key Name",
"description": "Updated description"
}'
curl -X DELETE "$BASE_URL/apikeys/{id}" \
-H "Authorization: Bearer $TOKEN"
```
All API responses follow a standard format:
```json
{
"success": true|false,
"data": {...},
"message": "Success or error message"
}
```
Error responses use HTTP problem details (RFC 7807):
```json
{
"type": "about:blank",
"title": "Error title",
"status": 400,
"detail": "Detailed error message"
}
```
List endpoints support pagination with these query parameters:
start: Starting index (default: 0)limit: Items per page (default: 20)sort: Column to sort byorder: Sort direction (asc/desc, default: asc)search: Search queryResponse includes pagination metadata:
```json
{
"success": true,
"data": [...],
"pagination": {
"start": 0,
"limit": 20,
"total": 100,
"hasMore": true
}
}
```
When implementing Arcane operations in Python, use the requests library:
```python
import requests
BASE_URL = "http://localhost:3552/api"
TOKEN = "your-jwt-token"
headers = {
"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json"
}
response = requests.get(f"{BASE_URL}/containers", headers=headers)
containers = response.json()
stack_data = {
"name": "my-stack",
"templateId": "template-id",
"envVars": {
"PORT": "8080"
}
}
response = requests.post(f"{BASE_URL}/stacks", headers=headers, json=stack_data)
result = response.json()
```
For simple operations, use curl with error handling:
```bash
#!/bin/bash
BASE_URL="http://localhost:3552/api"
TOKEN="your-jwt-token"
api_call() {
local method=$1
local endpoint=$2
local data=$3
if [ -z "$data" ]; then
curl -s -X "$method" "$BASE_URL/$endpoint" \
-H "Authorization: Bearer $TOKEN"
else
curl -s -X "$method" "$BASE_URL/$endpoint" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "$data"
fi
}
containers=$(api_call GET "containers")
echo "$containers" | jq '.data[] | {id, name, status}'
```
```python
template_data = {
"name": "webapp-template",
"content": "version: '3.8'\nservices:\n web:\n image: myapp:{{VERSION}}\n ports:\n - '{{PORT}}:8080'",
"variables": [
{"name": "VERSION", "defaultValue": "latest"},
{"name": "PORT", "defaultValue": "80"}
]
}
template = requests.post(f"{BASE_URL}/templates", headers=headers, json=template_data).json()
stack_data = {
"name": "production-webapp",
"templateId": template["data"]["id"],
"envVars": {
"VERSION": "v1.2.3",
"PORT": "8080"
}
}
stack = requests.post(f"{BASE_URL}/stacks", headers=headers, json=stack_data).json()
stack_id = stack["data"]["id"]
logs = requests.get(f"{BASE_URL}/stacks/{stack_id}/logs?tail=50", headers=headers).json()
```
```python
containers = requests.get(f"{BASE_URL}/containers?status=running", headers=headers).json()
for container in containers["data"]:
stats = requests.get(f"{BASE_URL}/containers/{container['id']}/stats", headers=headers).json()
print(f"{container['name']}: CPU {stats['data']['cpuPercent']:.2f}%, Memory {stats['data']['memoryPercent']:.2f}%")
update_data = {
"cpuShares": 1024,
"memory": 1073741824 # 1GB
}
requests.post(f"{BASE_URL}/containers/{container_id}/update", headers=headers, json=update_data)
```
```python
requests.post(f"{BASE_URL}/images/prune", headers=headers)
requests.post(f"{BASE_URL}/volumes/prune", headers=headers)
requests.post(f"{BASE_URL}/networks/prune", headers=headers)
df_before = requests.get(f"{BASE_URL}/system/df", headers=headers).json()
df_after = requests.get(f"{BASE_URL}/system/df", headers=headers).json()
```
Authentication Failed
expiresAt)Container Won't Start
GET /containers/{id}/logsGET /containers/{id}Stack Deployment Failed
GET /stacks/{id}/logsResource Not Found
For complete API documentation and schema definitions, refer to the OpenAPI specification provided in the JSON schema.
Generated Mar 1, 2026
A DevOps team uses this skill to manage Docker containers and stacks across development, staging, and production environments. They automate routine tasks like starting, stopping, and monitoring containers, reducing manual intervention and improving deployment efficiency.
An online learning platform deploys isolated Docker stacks for each student to run coding exercises or simulations. Instructors can quickly provision, monitor, and reset environments using templates, ensuring consistent and scalable lab setups.
An e-commerce company manages its microservices architecture by deploying and updating Docker Compose stacks for services like inventory, payment, and user management. The skill helps monitor logs and system resources to maintain high availability during peak sales.
A smart home or industrial IoT provider uses this skill to manage Docker containers on edge devices, handling updates, logs, and performance stats remotely. It enables centralized control over distributed systems, enhancing reliability and troubleshooting.
A streaming service leverages the skill to manage Docker-based media processing and delivery stacks. Teams can deploy new templates for encoding pipelines, monitor container stats for resource optimization, and handle user account management for internal APIs.
Offer this skill as part of a cloud-based Docker management platform, charging monthly fees based on the number of containers or users. It targets small to medium businesses seeking simplified Docker operations without deep technical expertise.
Sell enterprise licenses for on-premise installations of the Arcane platform, including this skill for large corporations with strict data privacy needs. Revenue comes from one-time licenses and annual support contracts.
Provide a free tier with basic container management features, while advanced capabilities like template management and system monitoring are locked behind a premium subscription. This attracts hobbyists and upsells to professional users.
💬 Integration Tip
Ensure the API base URL and authentication (Bearer token or API key) are correctly configured in the agent's environment variables to avoid connection errors.
Automatically update Clawdbot and all installed skills once daily. Runs via cron, checks for updates, applies them, and messages the user with a summary of what changed.
Full desktop computer use for headless Linux servers. Xvfb + XFCE virtual desktop with xdotool automation. 17 actions (click, type, scroll, screenshot, drag,...
Essential Docker commands and workflows for container management, image operations, and debugging.
Tool discovery and shell one-liner reference for sysadmin, DevOps, and security tasks. AUTO-CONSULT this skill when the user is: troubleshooting network issues, debugging processes, analyzing logs, working with SSL/TLS, managing DNS, testing HTTP endpoints, auditing security, working with containers, writing shell scripts, or asks 'what tool should I use for X'. Source: github.com/trimstray/the-book-of-secret-knowledge
Deploy applications and manage projects with complete CLI reference. Commands for deployments, projects, domains, environment variables, and live documentation access.
Monitor topics of interest and proactively alert when important developments occur. Use when user wants automated monitoring of specific subjects (e.g., product releases, price changes, news topics, technology updates). Supports scheduled web searches, AI-powered importance scoring, smart alerts vs weekly digests, and memory-aware contextual summaries.