portainer
SafeDevOps & Cloud
Control Docker containers and stacks via Portainer API.
SKILL.md
# š³ 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>
More in DevOps & Cloud
Azure CLI
CautionComprehensive Azure Cloud Platform management via command-line interface.
cloudflare
SafeManage Cloudflare Workers, KV, D1, R2, and secrets using the Wrangler CLI.
coolify
CautionManage Coolify deployments, applications, databases, and services via the Coolify API.
digital-ocean
SafeManage Digital Ocean droplets, domains, and infrastructure via DO API.