Skip to main content

rockerc

Continuous Integration Status

Ci Codecov GitHub issues GitHub pull-requests merged GitHub release PyPI - Downloads License Python Pixi Badge

Installation

To quickly install rockerc and its executables, follow these steps:

  1. Install uv:

    curl -Ls https://astral.sh/uv/install.sh | bash
    
  2. Install rockerc and executables from rocker:

    uv tool install rockerc --with-executables-from rocker
    

This will install rockerc and make its CLI tools available in your environment.

Architecture

rockerc follows a layered architecture designed for maximum code reuse between terminal and VSCode workflows:

Base Layer

  • rockerc: Core container management tool that reads rockerc.yaml files and launches containers
  • rockervsc: Light wrapper on rockerc with the same interface, adds VSCode integration

Environment Layer

  • renv: Multi-repository environment manager that collects configuration arguments and passes them to rockerc
  • renvvsc: Functions the same as renv, but passes arguments to rockervsc instead of rockerc

Benefits of this Architecture

  • Maximum code reuse: Changes in core functionality automatically benefit both terminal and VSCode workflows
  • Consistent interfaces: All tools share the same command-line interface and configuration format
  • Easy maintenance: Bug fixes and features only need to be implemented once in the base layer

This design ensures that whether you're using terminal-based development or VSCode integration, you get the same robust container management with your preferred interface.

Usage

navigate to a directory with a rockerc.yaml file and run:

rockerc

This will search recursively for rockerc.yaml and pass those arguments to rocker

Unified Detached Execution & VS Code Integration

rockerc now always launches (or reuses) the container in detached mode and then opens an interactive shell via docker exec. This avoids stdin/TTY interference and enables a reliable VS Code attach workflow.

Basic run (detached + shell):

rockerc

Attach VS Code as well (exact same container) using the new flag:

rockerc --vsc

For convenience, the rockervsc command is just an alias for:

rockerc --vsc

What Happens Under the Hood

  1. Merge global (~/.rockerc.yaml) and project rockerc.yaml config.
  2. If a dockerfile key exists, build a tagged image and strip the pull extension.
  3. Ensure required rocker flags are injected:
    • --detach
    • --name <container> / --image-name <container>
    • Workspace volume mount: <project>:/workspaces/<container>
  4. Run rocker only if the container does not already exist.
  5. (Optional) Launch VS Code: code --folder-uri vscode-remote://attached-container+<hex>/workspaces/<container>
  6. Open an interactive shell with docker exec -it <container> $SHELL.

Reusing Containers

If a container with the derived name already exists, rockerc reuses it (skips rocker invocation) and simply attaches shell / VS Code (if --vsc).

Force a fresh container (timestamp-rename the old one):

rockerc --force
rockerc --vsc --force

Environment Variables

You can tune startup wait timing (useful on slower hosts) with:

  • ROCKERC_WAIT_TIMEOUT (default: 20 seconds)
  • ROCKERC_WAIT_INTERVAL (default: 0.25 seconds)

Create Dockerfile Artifacts

If you include create-dockerfile in args or pass --create-dockerfile, a Dockerfile.rocker and run_dockerfile.sh script are generated using rocker's dry-run output.

Notes & Caveats

  • Using --rm in custom extra args is discouraged with --vsc since closing the shell would remove the container out from under VS Code.
  • The volume mount path is standardized to /workspaces/<container> to match VS Code's remote container expectations.
  • Existing behavior of merging & deduplicating extensions (args) and blacklist remains unchanged.

rockervsc forwards all arguments to rockerc, so you can use any rockerc options:

rockervsc --gemini

The command will:

  1. Run rockerc with your arguments plus container configuration for VS Code
  2. Launch VS Code and attach it to the container
  3. If the container already exists, it will just attach VS Code without recreating it

For multi-repository development with git worktrees and VS Code, use renvsc:

renvsc owner/repo@branch

renvsc combines the full functionality of renv (repository and worktree management) with automatic VS Code integration. See renv.md for complete documentation.

Motivation

Rocker is an alternative to docker-compose that makes it easier to run containers with access to features of the local environment and add extra capabilities to existing docker images. However rocker has many configurable options and it can get hard to read or reuse those arguments. This is a naive wrapper that read a rockerc.yaml file and passes them to rocker. There are currently no plans to integrate docker-compose like functionality directly into rocker so I made this as a proof of concept to see what the ergonomics of it would be like.

Caveats

I'm not sure this is the best way of implementing rockerc like functionality. It might be better to implemented it as a rocker extension, or in rocker itself. This was just the simplest way to get started. I may explore those other options in more detail in the future.

rocker.yaml configuration

You need to pass either a docker image, or a relative path to a dockerfile

rockerc.yaml

image: ubuntu:22.04

or

dockerfile: Dockerfile

will look for the dockerfile relative to the rockerc.yaml file

Configuration Examples

See the examples/ directory for comprehensive configuration examples:

Each example includes detailed inline comments explaining the configuration options and their purposes.

Metadata

Release files for rockerc 0.19.0

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

Source distribution (sdist)

Source distribution for rockerc 0.19.0
File Size Uploaded
rockerc-0.19.0.tar.gz 43.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rockerc 0.19.0
File Interpreter ABI Platform
rockerc-0.19.0-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 90.4 kB

Release files / rockerc-0.19.0.tar.gz

Download URL rockerc-0.19.0.tar.gz
Size 43.2 kB
Tags Source
SHA-256 checksum
How to use checksums
60e87b24f8070b7eebe5e5f95bc938cffd168cbeffb39ee148a13b17dd25c547
BLAKE2b-256 checksum
How to use checksums
67ecb172e426a48c8d9733239c6d9b6a9c21ac32dcb5142b59797382b80afdd4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rockerc-0.19.0-py2.py3-none-any.whl

Download URL rockerc-0.19.0-py2.py3-none-any.whl
Size 47.2 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
5e9418197385736331c99636cdc7d6705667b9e654776b091cb7ff04ab950f40
BLAKE2b-256 checksum
How to use checksums
393f470cbcb18702bb58c27860cce239245099c998ce38a013080fbc0619001a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release history Release notifications | RSS feed

This release

0.19.0 This release

2 release files

0.18.0

2 release files

0.16.0

2 release files

0.15.0

2 release files

0.14.0

2 release files

0.13.0

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

0.0.5

2 release files

0.0.4

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