← 返回 Skills 市场
asteinberger

Portainer

作者 Andy Steinberger · GitHub ↗ · v1.0.0
cross-platform ⚠ suspicious
3373
总下载
3
收藏
10
当前安装
1
版本数
在 OpenClaw 中安装
/install portainer
功能描述
Control Docker containers and stacks via Portainer API. List containers, start/stop/restart, view logs, and redeploy stacks from git.
使用说明 (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:

    # 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

Version Date Changes
1.0.0 2026-01-25 Initial release

🐸 Credits

  @..@
 (----)
( >__\x3C )   "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


\x3Cdiv align="center">

Made with 💚 for the Clawdbot Community

Ribbit! 🐸

\x3C/div>

安全使用建议
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.
功能分析
Type: OpenClaw Skill Name: portainer Version: 1.0.0 The skill bundle is benign, providing legitimate functionality to control Docker containers and stacks via the Portainer API. The `SKILL.md` clearly outlines its purpose and commands, without any prompt injection attempts. The `portainer.sh` script uses `curl` and `jq` to interact with the Portainer API, handling `PORTAINER_URL` and `PORTAINER_API_KEY` securely from `~/.clawdbot/.env`. All API calls are directed to the configured Portainer instance, with no evidence of data exfiltration to unauthorized endpoints, malicious execution (e.g., `curl|bash`), persistence mechanisms, or obfuscation.
能力评估
⚠ 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.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install portainer
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /portainer 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
Initial release - Docker container and stack management via Portainer API
元数据
Slug portainer
版本 1.0.0
许可证 —
累计安装 10
当前安装数 10
历史版本数 1
常见问题

Portainer 是什么?

Control Docker containers and stacks via Portainer API. List containers, start/stop/restart, view logs, and redeploy stacks from git. 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 3373 次。

如何安装 Portainer?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install portainer」即可一键安装,无需额外配置。

Portainer 是免费的吗?

是的,Portainer 完全免费(开源免费),可自由下载、安装和使用。

Portainer 支持哪些平台?

Portainer 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Portainer?

由 Andy Steinberger(@asteinberger)开发并维护,当前版本 v1.0.0。

💬 留言讨论