DevOps & CloudDocumentedScanned

portainer

Control Docker containers and stacks via Portainer API.

Share:

Installation

npx clawhub@latest install portainer

View the full skill documentation and source below.

Documentation

🐳 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

  • 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!)

  • Configure credentials:

  • # Add to ~/.clawdbot/.env
       PORTAINER_URL=
       PORTAINER_API_KEY=ptr_your_token_here

  • 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": "",
      "UpdateDate": "2026-01-25T08:44:56Z"
    }


    redeploy β€” Pull & Redeploy Stack πŸ”„

    ./portainer.sh redeploy 25

    Output:

    βœ“ Stack 'steinbergerraum' redeployed successfully

    This will:

  • Pull latest code from git

  • Rebuild containers if needed

  • 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=" >> ~/.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!"

    Powered by: [Portainer]() API
    Part of: [Clawdbot]() Skills Collection


    Made with πŸ’š for the Clawdbot Community

    Ribbit! 🐸