A friendly CLI to manage multiple Docker Compose deployments with style.
Project description
⚓ docker-captain
docker-captain is a friendly command-line tool that helps you manage multiple Docker Compose projects under a single folder.
🚀 Features
For a quick overview of the available commands, run docker-captain --help.
🔍 Project Auto-Detection
docker-captain automatically detects any subfolder containing a Docker Compose file — such as compose.yaml, compose.yml, docker-compose.yaml, or docker-compose.yml.
It scans the folder specified in the configuration file, or passed in the DOCKER_CAPTAIN_PROJECTS environment variable, which you can export here:
export DOCKER_CAPTAIN_PROJECTS=/path/to/your/deployments # takes precedence over the config file
Detection is purely based on the file names — if a folder contains one of those Compose files, it’s recognized as a valid “project”, taking its name from the folder.
⚙️ Project Management via manage
Use the docker-captain manage command to interactively select which projects should be considered active.
You’ll see a multi-select list of all detected projects — you can check or uncheck them using the keyboard, then confirm with Enter.
The selected projects become your active fleet, used by commands like rally and abandon.
🚢 Easy Interaction with Single Projects
Need to start or stop one project? Use these straightforward commands:
docker-captain start calibre --detach --remove-orphans
docker-captain stop calibre --remove-orphans
docker-captain restart calibre
They’re thin wrappers around standard docker compose commands (up, down, and restart), but automatically use the correct compose file and folder context.
Flags:
-d/--detach: Run containers in background.--remove-orphans: Remove orphaned containers not defined in the compose file.
📋 Listing Projects with list
See all detected projects neatly formatted in a Rich table:
docker-captain list
This shows:
- Project name
- Whether it’s Active (selected via
manage) - Whether it’s currently Running (
docker compose lsis checked behind the scenes)
You can also view the compose file paths with --verbose:
docker-captain list --verbose
⚓ Rally and Abandon Your Fleet
Once you’ve marked projects as active using manage, you can control them all together:
-
Start all active projects:
docker-captain rally --detach
-
Stop all active projects:
docker-captain abandon
These commands behave like start and stop, but apply to every active project in one go — perfect for booting up or shutting down your entire environment.
📦 Installation
You can install docker-captain using uv, pipx, or plain pip.
# Install with
uv tool install docker-captain
pipx install docker-captain
# or try it out with
uvx docker-captain
🗒️ Configuration
captain-docker support a simple YAML config file with the following structure:
# ~/.config/docker-captain/config.yaml (on Linux)
projects_folder: /path/to/your/deployments # environment variable: DOCKER_CAPTAIN_PROJECTS_FOLDER
This configuration file can be generated interactively by running captain-docker configure.
🧭 Folder Structure Example
Your deployments might look like this:
~/Deployments/
├── calibre/
│ └── compose.yaml
├── immich/
│ ├── compose.yaml
│ └── immich.env
├── paperless-ngx/
│ ├── compose.yaml
│ └── paperless-ngx.env
└── syncthing/
└── compose.yaml
Each subfolder is automatically detected as a project if it has a Compose file.
🧠 Tech Stack
| Library | Purpose |
|---|---|
| Typer | CLI framework |
| Rich | Beautiful terminal output |
| Questionary | Interactive prompts |
| sh | Simple subprocess management |
| PyYAML | YAML parsing |
🐙 Example Workflow
# Detect and list all projects
docker-captain list
# Choose which projects are active
docker-captain manage
# Start all active projects
docker-captain rally -d
💡 Inspiration
I've been using docker-compose.yaml files to manage my home server for a while.
I found the internet is full of tools to observe docker deployments, but I couldn't find one to manage my Docker Compose files.
I wanted something simple, lightweight, and portable.
I stumbled across jenssegers/captain, a Go project with a similar idea - a simple wrapper around docker compose, but only acting on one project at a time.
Given Python is my main language and the project hasn't seen any activity in 3 years, I decided to extend its scope and write docker-captain.
Hope this is useful to someone, happy sailing! ⛵
🔧 Development
If you want to contribute to the project, please start by opening an issue.
You can interact with the project via uv and the justfile (from casey/just) at the root of the repository.
Simply run just to show the available recipes.
# Create a virtual environment for the project
uv venv --all-groups
source .venv/bin/activate
# Linting, formatting, etc.
just # show the list of all commands
just lint
# Run docker-captain from the local folder
uv run docker-captain
Project details
Release history Release notifications | RSS feed
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 docker_captain-0.1.7.tar.gz.
File metadata
- Download URL: docker_captain-0.1.7.tar.gz
- Upload date:
- Size: 12.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
590726b90ac5db072d903b999d593d50a1f808a361bbd64a43a2019dc37733b4
|
|
| MD5 |
d1640997fae39e9b9943de36fa8e09a1
|
|
| BLAKE2b-256 |
86c26c7194881a79fe2f89225ce5d4471bf43ec7535840f6a9a80fc1ae406e45
|
File details
Details for the file docker_captain-0.1.7-py3-none-any.whl.
File metadata
- Download URL: docker_captain-0.1.7-py3-none-any.whl
- Upload date:
- Size: 14.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28511adbedea2a660b40acccdddb32a5805ab25b9695bd8547fa7c33cb842f33
|
|
| MD5 |
e70d65c0eea16333e107b2809488b7f9
|
|
| BLAKE2b-256 |
b01ffbf383cfb2f629f976d82416934847732cd045fb0fb1667c9b69e6751fac
|