Skip to main content
Bruno CLI is available as an official Docker image. Pull it, mount your collection, and run — no Node.js or npm needed on the host.

Where to pull from

Both registries receive identical images on every release.

Image variants

Both variants support linux/amd64 and linux/arm64.

Tags

Unsuffixed tags (:latest, :3.4.2, :3.4, :3) always resolve to the Alpine variant. Append -debian for the Debian variant (e.g. usebruno/cli:3.4.2-debian).

Quick start

Pull the image and verify it works:
docker pull downloads the image to your machine. docker run starts a container from that image — anything after the image name (usebruno/cli) is passed as arguments to bru, so --version prints the CLI version.
Adding --rm to docker run automatically removes the container after it exits. It’s not required, but keeps your system tidy by avoiding a buildup of stopped containers.

Run a collection

The Docker container needs access to your collection files to run them. Use the -v (volume mount) flag to map a directory on your host to /bruno inside the container. The path should always be mapped to /bruno — that’s the working directory the CLI expects. Since the image’s entrypoint is already set to bru, running usebruno/cli run is the same as running bru run on your local machine. Any arguments you pass after the image name go straight to the CLI.

Run a subfolder or single request

Choose an environment

Pass environment variables

Generate a report

For all bru run options — environments, variables, reporters, tags, parallel execution, and more — see Run Command Options.

Collection at a different path

If your collection is not in the current directory, point Docker at its path:

Two usage patterns

Mount at runtime (no image build needed)

Best for local development and ad-hoc runs.

Bake collection into a custom image

Best for CI pipelines and distributable test suites. Create a Dockerfile next to your bruno.json:
Build and run:
The base image runs as USER node (UID 1000) for security. Use --chown=node:node in COPY so the runtime user can write reports back to the mount.

CI/CD examples

GitHub Actions

GitLab CI

Docker Compose

Image details

Troubleshooting

Files written by the container may appear owned by a foreign UID. Fix with:
macOS Docker Desktop handles UID translation automatically.
The musl libc in Alpine can occasionally cause issues with native Node modules or SSL. Switch to the Debian variant:
The -v flag uses a colon separator that collides with Windows drive letters. Use --mount instead:
Or run inside WSL where POSIX paths work directly.
Bruno CLI’s run is non-recursive by default. If your collection has nested subfolders, add -r:

Resources