Personal Docker Manager
Manage Docker containers, stacks, templates, images, networks, volumes, users, and monitor system resources via the Arcane Docker Management API.
Manage Docker containers, stacks, templates, images, networks, volumes, users, and monitor system resources via the Arcane Docker Management API.
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
This 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 headercurl -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.
# Get all containers curl -X GET "$BASE_URL/containers" \ -H "Authorization: Bearer $TOKEN"Filter by status
curl -X GET "$BASE_URL/containers?status=running"
-H "Authorization: Bearer $TOKEN"Search containers
curl -X GET "$BASE_URL/containers?search=nginx"
-H "Authorization: Bearer $TOKEN"
# Start container curl -X POST "$BASE_URL/containers/{id}/start" \ -H "Authorization: Bearer $TOKEN"Stop container
curl -X POST "$BASE_URL/containers/{id}/stop"
-H "Authorization: Bearer $TOKEN"Restart container
curl -X POST "$BASE_URL/containers/{id}/restart"
-H "Authorization: Bearer $TOKEN"Remove container
curl -X DELETE "$BASE_URL/containers/{id}"
-H "Authorization: Bearer $TOKEN"Get container details
curl -X GET "$BASE_URL/containers/{id}"
-H "Authorization: Bearer $TOKEN"Get container logs
curl -X GET "$BASE_URL/containers/{id}/logs?tail=100"
-H "Authorization: Bearer $TOKEN"Get container stats
curl -X GET "$BASE_URL/containers/{id}/stats"
-H "Authorization: Bearer $TOKEN"
# Execute command in container curl -X POST "$BASE_URL/containers/{id}/exec" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "command": ["ls", "-la"], "workingDir": "/app" }'Rename container
curl -X POST "$BASE_URL/containers/{id}/rename"
-H "Authorization: Bearer $TOKEN"
-H "Content-Type: application/json"
-d '{ "name": "new-container-name" }'Update container resources
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" }'
curl -X GET "$BASE_URL/stacks" \ -H "Authorization: Bearer $TOKEN"
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://..." } }'
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\"" }'
# Get stack details curl -X GET "$BASE_URL/stacks/{id}" \ -H "Authorization: Bearer $TOKEN"Update stack
curl -X PUT "$BASE_URL/stacks/{id}"
-H "Authorization: Bearer $TOKEN"
-H "Content-Type: application/json"
-d '{ "envVars": { "PORT": "9090" } }'Remove stack
curl -X DELETE "$BASE_URL/stacks/{id}"
-H "Authorization: Bearer $TOKEN"Start stack
curl -X POST "$BASE_URL/stacks/{id}/start"
-H "Authorization: Bearer $TOKEN"Stop stack
curl -X POST "$BASE_URL/stacks/{id}/stop"
-H "Authorization: Bearer $TOKEN"Restart stack
curl -X POST "$BASE_URL/stacks/{id}/restart"
-H "Authorization: Bearer $TOKEN"Get stack logs
curl -X GET "$BASE_URL/stacks/{id}/logs?tail=100"
-H "Authorization: Bearer $TOKEN"Pull latest images for stack
curl -X POST "$BASE_URL/stacks/{id}/pull"
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/templates" \ -H "Authorization: Bearer $TOKEN"
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"] }'
# Get template curl -X GET "$BASE_URL/templates/{id}" \ -H "Authorization: Bearer $TOKEN"Update template
curl -X PUT "$BASE_URL/templates/{id}"
-H "Authorization: Bearer $TOKEN"
-H "Content-Type: application/json"
-d '{ "name": "updated-template-name", "description": "Updated description" }'Delete template
curl -X DELETE "$BASE_URL/templates/{id}"
-H "Authorization: Bearer $TOKEN"Get template content with parsed variables
curl -X GET "$BASE_URL/templates/{id}/content"
-H "Authorization: Bearer $TOKEN"
# Get global variables curl -X GET "$BASE_URL/templates/global-variables" \ -H "Authorization: Bearer $TOKEN"Update global variables
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" }'
curl -X GET "$BASE_URL/images" \ -H "Authorization: Bearer $TOKEN"
curl -X POST "$BASE_URL/images/pull" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "image": "nginx:latest" }'
# Get image details curl -X GET "$BASE_URL/images/{id}" \ -H "Authorization: Bearer $TOKEN"Remove image
curl -X DELETE "$BASE_URL/images/{id}"
-H "Authorization: Bearer $TOKEN"Prune unused images
curl -X POST "$BASE_URL/images/prune"
-H "Authorization: Bearer $TOKEN"Search images in registry
curl -X GET "$BASE_URL/images/search?term=nginx"
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/networks" \ -H "Authorization: Bearer $TOKEN"
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 }'
# Get network details curl -X GET "$BASE_URL/networks/{id}" \ -H "Authorization: Bearer $TOKEN"Remove network
curl -X DELETE "$BASE_URL/networks/{id}"
-H "Authorization: Bearer $TOKEN"Connect container to network
curl -X POST "$BASE_URL/networks/{id}/connect"
-H "Authorization: Bearer $TOKEN"
-H "Content-Type: application/json"
-d '{ "containerId": "container-id" }'Disconnect container from network
curl -X POST "$BASE_URL/networks/{id}/disconnect"
-H "Authorization: Bearer $TOKEN"
-H "Content-Type: application/json"
-d '{ "containerId": "container-id" }'Prune unused networks
curl -X POST "$BASE_URL/networks/prune"
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/volumes" \ -H "Authorization: Bearer $TOKEN"
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" } }'
# Get volume details curl -X GET "$BASE_URL/volumes/{name}" \ -H "Authorization: Bearer $TOKEN"Remove volume
curl -X DELETE "$BASE_URL/volumes/{name}"
-H "Authorization: Bearer $TOKEN"Prune unused volumes
curl -X POST "$BASE_URL/volumes/prune"
-H "Authorization: Bearer $TOKEN"
# Get Docker system info curl -X GET "$BASE_URL/system/info" \ -H "Authorization: Bearer $TOKEN"Get Docker version
curl -X GET "$BASE_URL/system/version"
-H "Authorization: Bearer $TOKEN"Get system stats
curl -X GET "$BASE_URL/system/stats"
-H "Authorization: Bearer $TOKEN"Get disk usage
curl -X GET "$BASE_URL/system/df"
-H "Authorization: Bearer $TOKEN"
# Get system events (streaming) curl -X GET "$BASE_URL/system/events" \ -H "Authorization: Bearer $TOKEN"Get events with filters
curl -X GET "$BASE_URL/system/events?since=1609459200&type=container"
-H "Authorization: Bearer $TOKEN"
curl -X GET "$BASE_URL/users" \ -H "Authorization: Bearer $TOKEN"
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" }'
# Get user details curl -X GET "$BASE_URL/users/{userId}" \ -H "Authorization: Bearer $TOKEN"Update user
curl -X PUT "$BASE_URL/users/{userId}"
-H "Authorization: Bearer $TOKEN"
-H "Content-Type: application/json"
-d '{ "email": "newemail@example.com", "role": "admin" }'Delete user
curl -X DELETE "$BASE_URL/users/{userId}"
-H "Authorization: Bearer $TOKEN"Change password
curl -X PUT "$BASE_URL/auth/password"
-H "Authorization: Bearer $TOKEN"
-H "Content-Type: application/json"
-d '{ "currentPassword": "oldpassword", "newPassword": "newpassword123" }'
curl -X GET "$BASE_URL/apikeys" \ -H "Authorization: Bearer $TOKEN"
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" }'
# Get API key details curl -X GET "$BASE_URL/apikeys/{id}" \ -H "Authorization: Bearer $TOKEN"Update API key
curl -X PUT "$BASE_URL/apikeys/{id}"
-H "Authorization: Bearer $TOKEN"
-H "Content-Type: application/json"
-d '{ "name": "Updated Key Name", "description": "Updated description" }'Delete API key
curl -X DELETE "$BASE_URL/apikeys/{id}"
-H "Authorization: Bearer $TOKEN"
All API responses follow a standard format:
{ "success": true|false, "data": {...}, "message": "Success or error message" }
Error responses use HTTP problem details (RFC 7807):
{ "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:
{ "success": true, "data": [...], "pagination": { "start": 0, "limit": 20, "total": 100, "hasMore": true } }
When implementing Arcane operations in Python, use the
requests library:
import requestsBASE_URL = "http://localhost:3552/api" TOKEN = "your-jwt-token"
headers = { "Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json" }
List containers
response = requests.get(f"{BASE_URL}/containers", headers=headers) containers = response.json()
Deploy stack
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:
#!/bin/bashBASE_URL="http://localhost:3552/api" TOKEN="your-jwt-token"
Function to make authenticated requests
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}
Example: List containers
containers=$(api_call GET "containers") echo "$containers" | jq '.data[] | {id, name, status}'
# 1. Create or select template 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()2. Deploy stack from template
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()
3. Monitor deployment
stack_id = stack["data"]["id"] logs = requests.get(f"{BASE_URL}/stacks/{stack_id}/logs?tail=50", headers=headers).json()
# Get running containers containers = requests.get(f"{BASE_URL}/containers?status=running", headers=headers).json()Get stats for each container
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 container resources if needed
update_data = { "cpuShares": 1024, "memory": 1073741824 # 1GB } requests.post(f"{BASE_URL}/containers/{container_id}/update", headers=headers, json=update_data)
# Prune unused resources 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)Get disk usage before and after
df_before = requests.get(f"{BASE_URL}/system/df", headers=headers).json()
... perform cleanup ...
df_after = requests.get(f"{BASE_URL}/system/df", headers=headers).json()
Authentication: Always use API keys for automated scripts and services. Use JWT tokens for interactive sessions.
Error Handling: Check response status codes and handle errors appropriately:
Resource Management:
Security:
Monitoring:
Templates:
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.
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.