Skip to content
Back to skills

Portainer

ASecurity

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

  • 651 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added February 10, 2026
devopsbashdockergitapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned February 12, 2026

npx -y skills add sundial-org/awesome-openclaw-skills --skill portainer --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Portainer?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Portainer
[![Security: A β€” Skills Directory](https://www.skillsdirectory.com/api/skills/sundial-org-portainer/badge)](https://www.skillsdirectory.com/skills/sundial-org-portainer)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: portainer
description: Control Docker containers and stacks via Portainer API. List containers, start/stop/restart, view logs, and redeploy stacks from git.
metadata: {"clawdbot":{"emoji":"🐳","requires":{"bins":["curl","jq"],"env":["PORTAINER_API_KEY"]},"primaryEnv":"PORTAINER_API_KEY"}}
---

# 🐳 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

| What | Details |
|------|---------|
| **Portainer** | Version 2.x with API access |
| **Tools** | `curl`, `jq` |
| **Auth** | API 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:**
   ```bash
   # 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

```bash
./portainer.sh status
```

**Output:**
```
Portainer v2.27.3
```

---

### `endpoints` β€” List Environments

```bash
./portainer.sh endpoints
```

**Output:**
```
3: portainer (local) - βœ“ online
4: production (remote) - βœ“ online
```

---

### `containers` β€” List Containers

```bash
# 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

```bash
./portainer.sh stacks
```

**Output:**
```
25: steinbergerraum - βœ“ active
33: cora - βœ“ active
35: minecraft - βœ“ active
4: pulse-website - βœ— inactive
```

---

### `stack-info` β€” Stack Details

```bash
./portainer.sh stack-info 25
```

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

---

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

```bash
./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

```bash
# 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

```bash
# 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"
```bash
# After merging PR
./portainer.sh redeploy 25
./portainer.sh logs steinbergerraum-web-1 4 20
```

### πŸ”§ "Debug Container"
```bash
./portainer.sh containers
./portainer.sh logs cora-web-1
./portainer.sh restart cora-web-1
```

### πŸ“Š "System Overview"
```bash
./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:**
```bash
# 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

| Version | Date | Changes |
|---------|------|---------|
| 1.0.0 | 2026-01-25 | Initial 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](https://portainer.io/) API  
**Part of:** [Clawdbot](https://clawdhub.com) Skills Collection

---

<div align="center">

**Made with πŸ’š for the Clawdbot Community**

*Ribbit!* 🐸

</div>

Files in this skill

  • SKILL.md6.3 KB
  • portainer.sh6.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…