DocHub
Five development containers with Claude Code, Docker, and full toolchain for AI development

LXC Containers

Five Ubuntu 24.04 LXC containers, each assigned to a developer with their own Claude Code instance, tmux session, and Docker support.

Container Inventory

Container Developer SSH Alias Port Internal IP DNS Web Terminal
chasclaude Chas (primary) ssh chasclaude 2211 10.0.3.11 chas.ipnoelp.io term.ipnoelp.io/chasclaude/
infoclaude Chas (secondary) ssh infoclaude 2212 10.0.3.12 info.ipnoelp.io term.ipnoelp.io/infoclaude/
seanclaude Sean ssh seanclaude 2213 10.0.3.13 (direct IP) term.ipnoelp.io/seanclaude/
jazclaude Jaz ssh jazclaude 2214 10.0.3.14 jaz.ipnoelp.io term.ipnoelp.io/jazclaude/
managerclaude Shared ssh managerclaude 2215 10.0.3.15 mgr.ipnoelp.io term.ipnoelp.io/managerclaude/

Standard Toolchain (all containers)

Category Software
OS Ubuntu 24.04 LTS
Runtime Node.js 22, Python 3.12
Containers Docker 29.2.1 (via LXC nesting)
AI Claude Code (latest)
Terminal tmux 3.4, mosh
Version Control git, gh (GitHub CLI)
Shell bash with color-coded tmux status bar

Claude Code Skills (13 total)

Located in ~/.claude/commands/ on each container. Source: OmelasAI/claude-skills.

Category Skills
Session /start, /pause, /end
Git /status, /commit, /push, /pull, /branch
Operations /incident, /deploy, /sync
Documentation /audit
Setup /new-project

Container Configuration

LXC Storage

Containers are stored on NVMe at /data/lxc/ (configured via /etc/lxc/lxc.conf).

Networking

  • Bridge: lxcbr0 (10.0.3.0/24)
  • Gateway: 10.0.3.1 (host)
  • DHCP: dnsmasq on bridge
  • NAT: iptables MASQUERADE for internet access
  • Port forwarding: DNAT rules in /etc/rc.local

Docker-in-LXC

Each container has LXC nesting enabled:

  • AppArmor: unconfined
  • cgroup mounts: passed through
  • Allows running Docker containers inside LXC containers

Login Gateway

Each container has .login-gateway.sh providing a color-coded banner and menu:

  • [1] Launch Claude Code
  • [2] Drop to terminal
  • [q] Disconnect

Color-Coded tmux

Each machine has a unique tmux status bar color for visual identification:

Machine Color
chasclaude Cyan
infoclaude Green
seanclaude Yellow
jazclaude Magenta
managerclaude White
laptop Blue
ser8 Orange

Claude Net MCP

Each container has Claude Net MCP configured with direct HTTP to 10.0.3.1:3500 (the hub on the host). This enables inter-instance messaging without SSH tunneling.

Session Logging

tmux sessions are logged to /var/log/claude-sessions/ for audit and recovery.

Access Methods

SSH (primary)

ssh chasclaude    # Uses DNS hostname + port from ~/.ssh/config
ssh infoclaude
ssh seanclaude
ssh jazclaude
ssh managerclaude

Mosh (mobile-friendly)

mosh chasclaude   # UDP-based, handles network changes gracefully

Each container has 10 Mosh UDP ports allocated (60011-60060 range).

Web Terminal (browser-based)

Via https://term.ipnoelp.io — authenticated by Cloudflare Access (Google OAuth, @omelasai.com). See the Web Terminals page for details.

Admin access (from host)

ssh ovh5 "sudo lxc-attach -n chasclaude -- <command>"

Use lxc-attach for admin tasks rather than SSH to individual containers.

Auto-Approve Permissions

All containers have these Claude Code permissions pre-configured:

  • Bash(*) — Shell commands
  • Read(*) — File reading
  • Edit(*) — File editing
  • Write(*) — File writing
  • Glob(*) — File pattern matching
  • Grep(*) — Content searching