Docker images for Coder workspaces. Built on Coder’s enterprise base and extended with language runtimes, developer tooling, and the AI CLIs we use day to day.
dockette/coder is meant to drop into a Coder Terraform template so new
workspaces come up with a sane dev stack already in place — no per-workspace provisioning scripts.
Every image builds on codercom/enterprise-base:ubuntu (Ubuntu, coder user, the usual Coder
expectations) and adds a shared baseline of developer and AI tooling. On top of that baseline, each
tag targets a specific stack: an all-in-one image (fx) plus focused, lighter images for PHP,
Node.js, Go, and Python.
All images are published to Docker Hub as dockette/coder,
one tag per template:
| Tag | Focus | Node.js | pnpm | Deno / Bun | PHP 8.5 + Composer | Python 3 | Go | Rootless Docker |
|---|---|---|---|---|---|---|---|---|
fx | Everything | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
php | PHP | ✅ | ✅ | |||||
nodejs | JavaScript runtime | ✅ | ✅ | |||||
golang | Go | ✅ | ✅ | |||||
python | Python | ✅ | ✅ |
Node.js (with
npm) ships in every image because the shared AI CLIs are installed from npm. Thenodejstag additionally provides Deno and Bun; only thefxtag addspnpm. The T3 Code browser GUI (t3) is bundled only in thefxtag.
Every image includes:
git, jq, ripgrep, tmux.npm (via NodeSource).gh) and GitLab CLI (glab).claude (Claude Code), opencode, codex (@openai/codex), copilot
(@github/copilot), and pi (@earendil-works/pi-coding-agent).agent-browser plus the Chrome shared libraries it needs (Chromium is
installed on first agent-browser install).The AI CLIs are installed into a location that survives Coder’s persistent /home/coder volume,
so they remain available after the home directory is mounted over at runtime.
dockette/coder:fxThe all-in-one image — the shared baseline plus every language runtime and Docker-in-Docker. Choose this when a workspace is polyglot or you don’t want to commit to one stack.
npm, pnpm), Deno, and Bun (Deno/Bun under /usr/local, with PATH set for login shells).curl, intl, mbstring, mysql, pgsql,
redis, xml, zip, imagick, bcmath, apcu, gmp, ldap, amqp, memcached, soap,
xsl, yaml, …) and both coverage drivers (xdebug, pcov).pip and venv./usr/local/go; GOROOT/GOPATH/PATH set for login shells).t3) — a browser GUI that drives the coding
agents (OpenCode, Claude, Codex). Serves a web UI on port 3773; t3 serve runs it headless
(no browser popup). Only bundled in the fx tag.dockette/coder:phpPHP-focused image for backend and web projects.
fx, including xdebug and pcov.npm (for asset builds and the shared AI CLIs).dockette/coder:nodejsJavaScript/TypeScript image with multiple runtimes.
npm./usr/local, with PATH set for login shells).dockette/coder:golangGo-focused image.
/usr/local/go; GOROOT/GOPATH/PATH set for login shells).npm (for the shared AI CLIs).dockette/coder:pythonPython-focused image.
pip and venv.npm (for the shared AI CLIs).Point your Coder workspace image at the tag that fits your stack (or build from the matching
<template>/Dockerfile if you fork):
resource "docker_container" "workspace" {
count = data.coder_workspace.me.start_count
- image = "codercom/enterprise-base:ubuntu"
+ image = "dockette/coder:fx"
...
}
Swap fx for php, nodejs, golang, or python to use a lighter, stack-specific image.
The fx image can run Docker-in-Docker without privileged root. Start the daemon inside the workspace:
dockerd-rootless-start
docker run --rm hello-world
DOCKER_HOST and XDG_RUNTIME_DIR are preset for login shells, so the CLI talks to the rootless
daemon automatically. The host must permit nested user namespaces — in a Coder Terraform template,
run the workspace container with privileged = true (or the equivalent --userns setup), and call
dockerd-rootless-start from startup_script so Docker is ready on boot.
Both variables are defaults. If DOCKER_HOST is already set, the profile and the script keep that
value. The script starts no daemon if one answers there.
Images are built and tested per template with the provided Makefile. DOCKER_VARIANT selects the
template (default fx):
# Build and test a single template
make build DOCKER_VARIANT=nodejs
make test DOCKER_VARIANT=nodejs
make run DOCKER_VARIANT=nodejs
# Build and test every template
make build-all
make test-all
Each template is smoke-tested in CI (build, then version checks for its runtimes and the shared
CLIs) and, on master, built and pushed to Docker Hub across all five tags.
See how to contribute to this package. Consider to support f3l1x. Thank you for using this package.
Content type
Image
Digest
sha256:f1f97939e…
Size
1.2 GB
Last updated
6 days ago
docker pull dockette/coder:phpPulls:
90
Last week