ClawSkills logoClawSkills

Portainer

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

Introduction

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