Custom Docker image extending lscr.io/linuxserver/code-server with the Dkdev development toolchain pre-installed.
Built into the image (Dockerfile):
- Build deps for Python (build-essential, libssl-dev, libffi-dev, etc.)
- Docker CLI + Compose plugin (daemon comes from host via socket mount)
- gh CLI (GitHub)
- git, tmux, vim, htop, jq, less
- postgresql-client, redis-tools
Installed at container start (init scripts in /custom-cont-init.d/):
- pyenv + Python 3.12.7 (in
/config/.pyenv) - nvm + Node 22.11.0 LTS (in
/config/.nvm) - Poetry (in
/config/.local/bin) - Claude Code CLI (npm global in nvm path)
Init scripts are idempotent — they detect existing installs and skip reinstall.
Local build (on the VPS or any host with Docker):
make build
docker images | grep dkdev/dev-envPull from registry (when published to ghcr.io):
make pull- Edit
Dockerfileorinit/*.sh make buildcd /docker/visual-studio-code-server-mrhj && docker compose up -d --force-recreate- Init scripts run automatically; new toolchain installs idempotently in
/config
Init scripts not running on container start:
docker logs visual-studio-code-server-mrhj-code-server-1 2>&1 | grep -E "custom-cont-init|pyenv|nvm"pyenv install fails (missing build dep): Check the apt packages in Dockerfile cover the pyenv build wiki.
Docker socket not accessible from inside container: Verify docker.sock mount in docker-compose.yml and that user abc (uid 1000) is in group docker on the host.