← 返回 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。

💬 留言讨论