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
--volumeor derived from the input URI path.
ptctools docker volume cp
Copy data between volumes and S3 (raw file copy).
- volume to volume: Uses
busyboxwithcp -a - S3 to volume: Uses
minio/mcto download files - volume to S3: Uses
minio/mcto 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/psqlfor database operations - Uses
minio/mccontainer 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
305389d2773149f32fbead48071eebf76b3f096f93a192fb0f2b5214b0f0c487
|
|
| MD5 |
03443e9bff5bffc71bbabbef7126d362
|
|
| BLAKE2b-256 |
d20698a7970e38619d0d9c76932477b6ce5526f298460f15c14a8bae792b67a0
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e452ecbbe4a5883ee9889f106765cbae63a2c4c432aa2c0ca9b02b67aadb8b2
|
|
| MD5 |
a9672805bbc5f2572f8998725bbc11bb
|
|
| BLAKE2b-256 |
d36148e642242a82c21d7425571a986d3aa6ba995b243e2c8699bb4ab05780f9
|