Portainer

v1.0.0

Control Docker containers and stacks via Portainer API. List containers, start/stop/restart, view logs, and redeploy stacks from git.

3· 3.3k·10 current·10 all-time
byAndy Steinberger@asteinberger
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
high confidence
!
Purpose & Capability
The name/description match the included script: it calls the Portainer REST API to list endpoints, control containers, view logs, and redeploy stacks. However the registry metadata only declares PORTAINER_API_KEY as a required environment variable while the script also requires PORTAINER_URL (and the SKILL.md instructs users to set PORTAINER_URL). This metadata omission is an inconsistency that could lead to confusion or misconfiguration.
Instruction Scope
Runtime instructions and the shell script stay within the stated purpose: they call Portainer API endpoints, read stack config to redeploy, and present logs. The script loads PORTAINER_* variables from ~/.clawdbot/.env (as instructed). This is expected, but the script will read that dotfile for PORTAINER_ variables — ensure that file only contains the intended tokens. The script does not appear to transmit data to any external endpoint other than the configured Portainer server.
Install Mechanism
This is instruction-only with an included shell script; there is no installer that downloads or executes remote code. That reduces supply-chain risk compared with arbitrary remote installs.
!
Credentials
The declared required env vars (metadata) list only PORTAINER_API_KEY but the script also requires PORTAINER_URL; the manifest should include both. The skill does not request unrelated credentials, which is good. The script also reads ~/.clawdbot/.env for PORTAINER_ keys (grep '^PORTAINER_') — that is reasonably scoped but you should ensure that file is protected. The script references Portainer-managed Git credential IDs when redeploying stacks (it uses those IDs from the stack config), which is expected behavior for redeploy, not a request for external Git secrets.
Persistence & Privilege
The skill does not request always:true, does not modify other skills or system-wide configs, and contains no install-time persistence. It runs on demand and uses the provided API token to call the Portainer server.
What to consider before installing
What to check before installing: - Metadata mismatch: the manifest only lists PORTAINER_API_KEY but the script and SKILL.md also require PORTAINER_URL. Make sure you (or the platform) provide PORTAINER_URL in the environment; otherwise the script will fail. - Dotfile and token safety: the script will read PORTAINER_ variables from ~/.clawdbot/.env. Ensure that file is readable only by you and contains only intended PORTAINER_* values. - Binaries: the script uses curl and jq (declared) but also uses column and strings in output paths; ensure those are available on the host or the script may fail. (No remote installers are used.) - Default endpoint id: many commands default to endpoint id 4. Confirm that your Portainer setup uses that id or explicitly supply the endpoint id to avoid operating on an unexpected endpoint. - Least privilege: the skill will call Portainer with the provided API token. Use a token with the minimal necessary scope for the operations you plan to allow (avoid a full-administrator token if possible). - Source verification: the skill has no homepage and the owner id is opaque; if you need higher assurance, obtain the script from a trusted source or review / run it in an isolated test environment first. If you fix the manifest to declare PORTAINER_URL and confirm the above, the skill appears coherent with its described functionality.

Like a lobster shell, security has layers — review code before you run it.

Runtime requirements

🐳 Clawdis
Binscurl, jq
EnvPORTAINER_API_KEY
Primary envPORTAINER_API_KEY
latestvk97ej8sggzvh3qnq86e10kzat97zx3bn
3.3kdownloads
3stars
1versions
Updated 1mo ago
v1.0.0
MIT-0

🐳 Portainer Skill

    ╔═══════════════════════════════════════════════════════════╗
    ║                                                           ║
    ║   🐳  P O R T A I N E R   C O N T R O L   C L I  🐳      ║
    ║                                                           ║
    ║       Manage Docker containers via Portainer API          ║
    ║            Start, stop, deploy, redeploy                  ║
    ║                                                           ║
    ╚═══════════════════════════════════════════════════════════╝

"Docker containers? I'll handle them from my lily pad." 🐸


📖 What Does This Skill Do?

The Portainer Skill gives you control over your Docker infrastructure through Portainer's REST API. Manage containers, stacks, and deployments without touching the web UI.

Features:

  • 📊 Status — Check Portainer server status
  • 🖥️ Endpoints — List all Docker environments
  • 📦 Containers — List, start, stop, restart containers
  • 📚 Stacks — List and manage Docker Compose stacks
  • 🔄 Redeploy — Pull from git and redeploy stacks
  • 📜 Logs — View container logs

⚙️ Requirements

WhatDetails
PortainerVersion 2.x with API access
Toolscurl, jq
AuthAPI Access Token

Setup

  1. Get API Token from Portainer:

    • Log into Portainer web UI
    • Click username → My Account
    • Scroll to "Access tokens" → Add access token
    • Copy the token (you won't see it again!)
  2. Configure credentials:

    # Add to ~/.clawdbot/.env
    PORTAINER_URL=https://your-portainer-server:9443
    PORTAINER_API_KEY=ptr_your_token_here
    
  3. Ready! 🚀


🛠️ Commands

status — Check Portainer Server

./portainer.sh status

Output:

Portainer v2.27.3

endpoints — List Environments

./portainer.sh endpoints

Output:

3: portainer (local) - ✓ online
4: production (remote) - ✓ online

containers — List Containers

# List containers on default endpoint (4)
./portainer.sh containers

# List containers on specific endpoint
./portainer.sh containers 3

Output:

steinbergerraum-web-1    running    Up 2 days
cora-web-1               running    Up 6 weeks
minecraft                running    Up 6 weeks (healthy)

stacks — List All Stacks

./portainer.sh stacks

Output:

25: steinbergerraum - ✓ active
33: cora - ✓ active
35: minecraft - ✓ active
4: pulse-website - ✗ inactive

stack-info — Stack Details

./portainer.sh stack-info 25

Output:

{
  "Id": 25,
  "Name": "steinbergerraum",
  "Status": 1,
  "EndpointId": 4,
  "GitConfig": "https://github.com/user/repo",
  "UpdateDate": "2026-01-25T08:44:56Z"
}

redeploy — Pull & Redeploy Stack 🔄

./portainer.sh redeploy 25

Output:

✓ Stack 'steinbergerraum' redeployed successfully

This will:

  1. Pull latest code from git
  2. Rebuild containers if needed
  3. Restart the stack

start / stop / restart — Container Control

# Start a container
./portainer.sh start steinbergerraum-web-1

# Stop a container
./portainer.sh stop steinbergerraum-web-1

# Restart a container
./portainer.sh restart steinbergerraum-web-1

# Specify endpoint (default: 4)
./portainer.sh restart steinbergerraum-web-1 4

Output:

✓ Container 'steinbergerraum-web-1' restarted

logs — View Container Logs

# Last 100 lines (default)
./portainer.sh logs steinbergerraum-web-1

# Last 50 lines
./portainer.sh logs steinbergerraum-web-1 4 50

🎯 Example Workflows

🚀 "Deploy Website Update"

# After merging PR
./portainer.sh redeploy 25
./portainer.sh logs steinbergerraum-web-1 4 20

🔧 "Debug Container"

./portainer.sh containers
./portainer.sh logs cora-web-1
./portainer.sh restart cora-web-1

📊 "System Overview"

./portainer.sh status
./portainer.sh endpoints
./portainer.sh containers
./portainer.sh stacks

🔧 Troubleshooting

❌ "Authentication required / Repository not found"

Problem: Stack redeploy fails with git auth error

Solution: The stack needs repositoryGitCredentialID parameter. The script handles this automatically by reading from the existing stack config.


❌ "Container not found"

Problem: Container name doesn't match

Solution: Use exact name from ./portainer.sh containers:

  • Include the full name: steinbergerraum-web-1 not steinbergerraum
  • Names are case-sensitive

❌ "PORTAINER_URL and PORTAINER_API_KEY must be set"

Problem: Credentials not configured

Solution:

# Add to ~/.clawdbot/.env
echo "PORTAINER_URL=https://your-server:9443" >> ~/.clawdbot/.env
echo "PORTAINER_API_KEY=ptr_your_token" >> ~/.clawdbot/.env

🔗 Integration with Clawd

"Redeploy the website"
→ ./portainer.sh redeploy 25

"Show me running containers"
→ ./portainer.sh containers

"Restart the Minecraft server"
→ ./portainer.sh restart minecraft

"What stacks do we have?"
→ ./portainer.sh stacks

📜 Changelog

VersionDateChanges
1.0.02026-01-25Initial release

🐸 Credits

  @..@
 (----)
( >__< )   "Containers are just fancy lily pads
 ^^  ^^     for your code to hop around!"

Author: Andy Steinberger (with help from his Clawdbot Owen the Frog 🐸)
Powered by: Portainer API
Part of: Clawdbot Skills Collection


<div align="center">

Made with 💚 for the Clawdbot Community

Ribbit! 🐸

</div>

Comments

Loading comments...