Skip to main content

Portainer Client Tools - CLI for managing Portainer from client

Project description

ptctools - Portainer Client Tools

CLI for managing Portainer stacks, volume backups, and database operations.

Note: Only tested on Portainer 2.33.6

Installation

# From Git repository
uv tool install git+https://github.com/tamntlib/ptctools.git
# or
uv tool install ptctools --from git+https://github.com/tamntlib/ptctools.git

# From local path
uv tool install openapi-generator-cli==7.19.0
openapi-generator-cli generate \
  -i portainer_openapi.yml \
  -g python \
  -o ./src/ptctools/portainer_client \
  --skip-validate-spec \
  --additional-properties=generateSourceCodeOnly=true
uv tool install . --no-cache --reinstall

Environment Variables

Variable Required Description
PORTAINER_URL Yes* Portainer base URL (can also use -u flag)
PORTAINER_ACCESS_TOKEN Yes Portainer API key
S3_ACCESS_KEY For S3 S3 access key
S3_SECRET_KEY For S3 S3 secret key
S3_ENDPOINT For S3 S3/MinIO endpoint URL
DUPLICATI_PASSPHRASE No Backup encryption passphrase

* Required for docker commands. Can be provided via -u flag instead.

Usage

# Set environment variables
export PORTAINER_URL=https://portainer.example.com
export PORTAINER_ACCESS_TOKEN=your-api-key
export S3_ACCESS_KEY=your-s3-key
export S3_SECRET_KEY=your-s3-secret
export S3_ENDPOINT=https://s3.<region>.amazonaws.com

# Stack deployment (Swarm-only)
ptctools docker stack deploy -n mystack -f compose.yaml

# Secret management (Swarm-only)
echo "postgresql://user:pass@db:5432/mydb" | ptctools docker secret create db_dsn
ptctools docker secret create -f /path/to/secret.txt my_secret
ptctools docker secret create -v "secret-value" my_secret

# Config management (Swarm-only)
ptctools docker config set -n my-config -d "config content"
ptctools docker config set -n nginx.conf -f ./nginx.conf
ptctools docker config set -n my-config -d "new content" --force
ptctools docker config list
ptctools docker config get -n my-config
ptctools docker config delete -n my-config

# Volume backup/restore (uses Duplicati)
ptctools docker volume backup -v vol1,vol2 -o s3://mybucket
ptctools docker volume restore -i s3://mybucket/vol1  # volume name derived from URI path
ptctools docker volume restore -v vol1 -i s3://mybucket/vol1  # explicit volume name

# Volume copy (raw copy using mc/busybox)
ptctools docker volume cp source dest                         # volume to volume
ptctools docker volume cp s3://mybucket/path dest              # S3 to volume
ptctools docker volume cp source s3://mybucket/path            # volume to S3

# Volume management
ptctools docker volume rm myvolume                             # remove volume (with confirmation)
ptctools docker volume rm -y myvolume                          # remove without confirmation
ptctools docker volume rename old_name new_name                # rename volume (copy + delete)

# Database backup/restore (uses minio/mc for S3)
ptctools docker db backup -c container_id -v db_data \
  --db-user postgres --db-name mydb -o backup.sql.gz
ptctools docker db backup -c container_id -v db_data \
  --db-user postgres --db-name mydb -o s3://mybucket/backups/db.sql.gz

ptctools docker db restore -c container_id -v db_data \
  --db-user postgres --db-name mydb -i backup.sql.gz
ptctools docker db restore -c container_id -v db_data \
  --db-user postgres --db-name mydb -i s3://mybucket/backups/db.sql.gz

# Clean up exited containers and unused images
ptctools docker clean
ptctools docker clean -y  # skip confirmation

# Override PORTAINER_URL with -u flag
ptctools docker secret create -u https://other.portainer.com -f dsn.txt my_secret

# Utils - local Duplicati operations (no Portainer needed)
ptctools utils backup --input ./data --output s3://backups/mydata
ptctools utils restore --input s3://backups/mydata --output ./restored

CLI Structure

ptctools
├── docker                    # Docker commands (via Portainer Docker proxy)
│   ├── stack deploy         # Deploy/update stack (Swarm-only)
│   ├── secret create        # Create Docker secret (Swarm-only)
│   ├── config set/get/list/delete  # Manage configs (Swarm-only)
│   ├── volume backup/restore/cp/rm/rename
│   ├── db backup/restore
│   └── clean                # Remove exited containers & unused images
├── utils backup/restore     # Local Duplicati operations
└── k8s ...                  # Kubernetes commands (future)

Commands

ptctools docker stack deploy

Deploy or update a Docker Swarm stack in Portainer.

ptctools docker secret create

Create a Docker Swarm secret. Value can be provided via stdin, file, or command-line argument.

ptctools docker config set/get/list/delete

Manage Docker Swarm configs via Portainer API.

ptctools docker volume backup/restore

  • backup: Backup multiple Docker volumes (comma-separated) to S3 using Duplicati container.
  • restore: Restore a single Docker volume from S3. Volume name can be specified via --volume or derived from the input URI path.

ptctools docker volume cp

Copy data between volumes and S3 (raw file copy).

  • volume to volume: Uses busybox with cp -a
  • S3 to volume: Uses minio/mc to download files
  • volume to S3: Uses minio/mc to upload files

ptctools docker volume rm

Remove a Docker volume. Use -y to skip confirmation, -f to force removal.

ptctools docker volume rename

Rename a volume by copying data to a new volume and deleting the original.

ptctools docker db backup/restore

Backup/restore PostgreSQL database. Supports both local files and S3 URIs.

  • Uses pg_dump/psql for database operations
  • Uses minio/mc container for S3 transfers

ptctools docker clean

Remove all exited containers and unused (dangling) images. Use -y to skip confirmation.

ptctools utils backup/restore

Local backup/restore operations using Duplicati CLI (docker or local). Does not require Portainer.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ptctools-0.2.1.tar.gz (647.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ptctools-0.2.1-py3-none-any.whl (2.5 MB view details)

Uploaded Python 3

File details

Details for the file ptctools-0.2.1.tar.gz.

File metadata

  • Download URL: ptctools-0.2.1.tar.gz
  • Upload date:
  • Size: 647.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.7

File hashes

Hashes for ptctools-0.2.1.tar.gz
Algorithm Hash digest
SHA256 305389d2773149f32fbead48071eebf76b3f096f93a192fb0f2b5214b0f0c487
MD5 03443e9bff5bffc71bbabbef7126d362
BLAKE2b-256 d20698a7970e38619d0d9c76932477b6ce5526f298460f15c14a8bae792b67a0

See more details on using hashes here.

File details

Details for the file ptctools-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: ptctools-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.7

File hashes

Hashes for ptctools-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3e452ecbbe4a5883ee9889f106765cbae63a2c4c432aa2c0ca9b02b67aadb8b2
MD5 a9672805bbc5f2572f8998725bbc11bb
BLAKE2b-256 d36148e642242a82c21d7425571a986d3aa6ba995b243e2c8699bb4ab05780f9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page