Skip to main content

Bollard

A Pythonic, zero-dependency client for the Docker and Podman Engine APIs. Prioritizes descriptive naming, context managers, and cross-platform ease of use.

Installation

pip install bollard

Project Structure

For a detailed overview of the project's architecture, see ARCHITECTURE.md.

Key Features

  • Pythonic API: list_containers instead of ps; remove_image instead of rmi.
  • Zero Dependencies: Uses only the Python standard library (http.client, socket, json).
  • Smart Connection: Auto-detects Docker/Podman sockets (Unix, Windows Pipes, DOCKER_HOST).
  • User Friendly: Auto-starts the Podman machine if the connection fails.
  • Resource Safety: Context managers for client connections and ephemeral containers.
  • Streaming Output: Real-time progress updates for long-running operations like pull and build.
  • .dockerignore Support: Respects .dockerignore files when building images.
  • Full Lifecycle: Manage Containers, Images, Networks, and Volumes.

Usage

Basic Connection

from bollard import DockerClient

with DockerClient() as client:
    for image in client.list_images():
        print(f"Image: {image.tags[0]}")

Managing Containers

with DockerClient() as client:
    # Run a container and get logs
    container = client.run_container("alpine:latest", command="echo 'Hello World'")
    print(container.logs())

    # Stop and remove
    container.stop()
    container.remove(force=True)

Ephemeral Containers (Auto-Cleanup)

Use with client.container(...) to automatically remove the container after the block exits, even if errors occur.

with DockerClient().container("alpine") as container:
    container.exec(["echo", "Running inside container"])
# Container is automatically removed

Streaming Image Operations

Methods pull_image, build_image, and push_image, when called with progress=True, return a generator that yields progress updates.

with DockerClient() as client:
    # Pull an image with progress
    for progress in client.pull_image("alpine:latest", progress=True):
        if "status" in progress:
            print(f"{progress['status']} {progress.get('progress', '')}")

    # Build from directory
    for log in client.build_image(".", "my-app:latest", progress=True):
        if "stream" in log:
            print(log["stream"], end="")

Managing Networks & Volumes

Create and manage Docker networks and volumes using Resource objects.

with DockerClient() as client:
    # Networks
    net = client.create_network("my-net", driver="bridge")
    print(net.id)
    net.remove()

    # Volumes
    vol = client.create_volume("my-data")
    print(vol.name)
    vol.remove()

File Operations

Copy files and directories in and out of containers directly from the Container object.

with DockerClient() as client:
    with client.container("alpine:latest", command="sleep 60") as container:
        # Copy host -> container
        container.copy_to("local_data/", "/dest/path/")

        # Copy container -> host
        container.copy_from("/src/path/data.txt", "local_output/")

Real-world Example: Stirling-PDF Conversion

This example demonstrates running a Stirling-PDF container to convert a "Hello World" HTML file into a PDF and then retrieving it.

from bollard import DockerClient
from time import sleep

env = {"SECURITY_ENABLE_LOGIN": "false"}

with DockerClient().container("frooodle/s-pdf", environment=env) as container:
        # Wait for the container to be ready
        res = ""
        while "HTTP" not in res:
            res = container.exec("curl -s -I http://localhost:8080")
            sleep(1)

        # Convert the HTML to PDF
        container.exec("sh -c 'echo \"<h1>Test PDF</h1>\" > /test.html'")
        result = container.exec(
            'curl -s -w "%{http_code}" '
            "-F 'fileInput=@/test.html' "
            "http://localhost:8080/api/v1/convert/html/pdf "
            "-o /test.pdf"
        )

        # Copy the PDF to the host
        container.copy_from("/test.pdf", ".")

Kubernetes YAML Support

Execute Kubernetes YAML files directly using Podman's native play kube feature.

with DockerClient() as client:
    # Requires a valid Kubernetes YAML file (Pod, Deployment, etc.)
    result = client.play_kube("pod.yaml")

    # Returns the JSON response from Podman describing created resources
    print("Created Pods:", result.get("Pods"))

Metadata

Release files for bollard 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bollard 0.1.3
File Size Uploaded
bollard-0.1.3.tar.gz 49.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bollard 0.1.3
File Interpreter ABI Platform
bollard-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 73.1 kB

Release files / bollard-0.1.3.tar.gz

Download URL bollard-0.1.3.tar.gz
Size 49.7 kB
Tags Source
SHA-256 checksum
How to use checksums
c2886ebe055b47119277ca815a0ef01168adb0e43f037b412ff131d4709c1ed2
BLAKE2b-256 checksum
How to use checksums
68b69b21a95b04cf6681ae29b2708fba3cff46247358bc9c4a40e4754430622c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"44","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / bollard-0.1.3-py3-none-any.whl

Download URL bollard-0.1.3-py3-none-any.whl
Size 23.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
eb1f774b99fab05bac854c9a075abc7c1adcee63176a471531439ef418c0113b
BLAKE2b-256 checksum
How to use checksums
47a675505dc7da08f4e02db10e02140a1165bd9068248116088845be0570f7ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"44","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page