Skip to main content

Versioned CLI and Python API for building and running ROS 2 Docker workspaces.

Project description

ros2docker

CI Coverage PyPI Python License Nightly E2E

ros2docker is a versioned Python CLI and API for building and running ROS 2 Docker workspaces from JSON-with-comments config files.

Install

Stable release:

pipx install ros2docker

Latest development version:

pipx install --force git+https://github.com/develNor/ros2docker.git@main

Non-pipx fallback:

python3 -m pip install --user ros2docker

Development Install

When developing ros2docker, install this checkout in editable mode so the host ros2docker command imports the local source:

pipx install --force --editable /path/to/ros2docker

Normal Python source changes are picked up immediately by new ros2docker commands. Reinstall after changing package metadata, dependencies, or console entry points in pyproject.toml.

Verify the editable command with:

ros2docker run --no-build --dry-run -m .

The dry run should print a docker run command that mounts the current directory as /ws and starts bash, without requiring -f/--config.

CLI

ros2docker run -m /host/project
ros2docker run --no-build -m /host/project
ros2docker build -f ros2docker.json
ros2docker run -f ros2docker.json
ros2docker run -f ros2docker.json --no-build -- -v /host/data:/data
ros2docker stop -f ros2docker.json
ros2docker exec -f ros2docker.json -- bash -lc 'ros2 --help'
ros2docker validate -f ros2docker.json
ros2docker validate -f ros2docker.json --print-resolved
ros2docker doctor -f ros2docker.json
ros2docker --version
python -m ros2docker --version

Every Docker action accepts --dry-run, which prints the Docker argv and exits without running Docker. The -f/--config option is optional; without it, ros2docker uses the default config, which starts an interactive Bash shell. Use ros2docker exec to run a command inside an already-running container, such as one started with run_type: "up". validate checks config syntax and schema without Docker side effects. doctor reports host readiness diagnostics before a build or run.

Config

Config files are JSON with // and /* ... */ comments. Supported keys include:

{
  "container_name": "example_ros2container",
  "image_name": "ros2docker",
  "run_type": "bash",
  "tty": true,
  "stdin_open": true,
  "mount_ws": true,
  "enable_gui_forwarding": false,
  "forward_ssh_agent": false,
  "run_args": [],
  "extra_run_args": [],
  "build_args": {},
  "bake_ros_packages": [],
  "catmux_file": "/ws/catmux.yaml",
  "catmux_params": {},
  "command": "ros2 topic list"
}

The machine-readable schema lives at src/ros2docker/resources/schema/ros2docker.schema.json. See docs/configuration.md for the full configuration contract. Unknown top-level config keys are rejected.

Supported run_type values are:

  • bash: start an interactive shell.
  • command: run the configured command as a one-shot container.
  • catmux: start a catmux session from catmux_file.
  • up: start a detached, long-lived keepalive container for later exec commands.

tty and stdin_open control Docker run interactivity. When omitted, bash and catmux default both to true; command and up default both to false. Set them explicitly for an interactive command run.

mount_ws mounts the config-adjacent ws directory into /ws; normal project configs do not need to duplicate that mount in run_args.

Host paths in -v/--volume and bind --mount args expand ~ and environment variables. Relative ./ and ../ host paths are resolved from the config file directory.

bake_ros_packages paths are also resolved from the config file directory and copied into a temporary Docker build context. The installed Python package directory is never mutated during builds.

enable_gui_forwarding forwards the X11 socket at /tmp/.X11-unix. forward_ssh_agent forwards the host SSH_AUTH_SOCK path when the variable is set and points to an existing socket or file.

Security / Trust Boundary

ros2docker is intended for trusted developer workspaces, configs, and ROS packages. It can mount host paths, forward X11, forward the SSH agent, build arbitrary packages, and execute Docker containers. Treat project configs and workspace contents as code that can affect the host through those features, and do not run untrusted inputs with this tool.

Development

For contributor setup, local checks, PR modes, merge policy, and release workflow, see CONTRIBUTING.md. CI behavior is summarized in docs/ci.md, release publishing is summarized in docs/release.md, issue-driven work tracking is summarized in docs/work-items.md, and reusable task recipes live in .github/ISSUE_TEMPLATE/.

Python API

from ros2docker.api import build, run, build_run, stop, exec_shell
from ros2docker.config import load_config, get_config_dir
from ros2docker.commands import make_build_command, make_run_command

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

ros2docker-0.1.2.tar.gz (30.8 kB view details)

Uploaded Source

Built Distribution

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

ros2docker-0.1.2-py3-none-any.whl (22.1 kB view details)

Uploaded Python 3

File details

Details for the file ros2docker-0.1.2.tar.gz.

File metadata

  • Download URL: ros2docker-0.1.2.tar.gz
  • Upload date:
  • Size: 30.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ros2docker-0.1.2.tar.gz
Algorithm Hash digest
SHA256 b6836b09753645a26c9bfaf29e25831a988a9f5562408a2c71857da9f688234d
MD5 706e0ff357ccb4d2197bcc874f4fc827
BLAKE2b-256 63f23672a23aca0c1dc124791c7aa505a8fbd7afd7100e16a471b6d66911379c

See more details on using hashes here.

Provenance

The following attestation bundles were made for ros2docker-0.1.2.tar.gz:

Publisher: release.yml on develNor/ros2docker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ros2docker-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: ros2docker-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 22.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ros2docker-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 429245941f6f0436946e631bd12d49162ba80f7f0623d92ce2fe683a45e478b7
MD5 f471ad8c38997fbfc42b088dea3258d8
BLAKE2b-256 319b03fb52b035168463ada4542a7c794913be8326328475d4ce9773358ca878

See more details on using hashes here.

Provenance

The following attestation bundles were made for ros2docker-0.1.2-py3-none-any.whl:

Publisher: release.yml on develNor/ros2docker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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