Skip to main content

A friendly CLI to manage multiple Docker Compose deployments with style.

Project description

⚓ docker-captain

PyPi Release GitHub Release Publish to PyPi Commits Since Release

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 ls is 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


Download files

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

Source Distribution

docker_captain-0.1.7.tar.gz (12.2 kB view details)

Uploaded Source

Built Distribution

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

docker_captain-0.1.7-py3-none-any.whl (14.6 kB view details)

Uploaded Python 3

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

Hashes for docker_captain-0.1.7.tar.gz
Algorithm Hash digest
SHA256 590726b90ac5db072d903b999d593d50a1f808a361bbd64a43a2019dc37733b4
MD5 d1640997fae39e9b9943de36fa8e09a1
BLAKE2b-256 86c26c7194881a79fe2f89225ce5d4471bf43ec7535840f6a9a80fc1ae406e45

See more details on using hashes here.

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

Hashes for docker_captain-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 28511adbedea2a660b40acccdddb32a5805ab25b9695bd8547fa7c33cb842f33
MD5 e70d65c0eea16333e107b2809488b7f9
BLAKE2b-256 b01ffbf383cfb2f629f976d82416934847732cd045fb0fb1667c9b69e6751fac

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