d65f8cc077
The Docker daemon is system-wide — named volumes are prefixed by the
compose project name, which defaults to the basename of the directory
holding docker-compose.yml. Two users whose compose file lives under
a directory with the same name (e.g. ~/alice/opencode-devbox and
~/bob/opencode-devbox) would silently share volumes, corrupting each
other's opencode data, bash history, and TUI settings.
Add an explicit top-level 'name: devbox-${SIGNUM}' so the project
name (and therefore all volume prefixes) is unique per user. The old
comment claiming directory-name prefixing was sufficient was wrong —
it only works if directory basenames differ, which isn't guaranteed
on multi-user hosts or when users follow the same setup instructions.
59 lines
2.0 KiB
YAML
59 lines
2.0 KiB
YAML
# opencode-devbox docker-compose for shared machines
|
|
#
|
|
# For machines where multiple users share one OS account (e.g. 'garage').
|
|
# Each user gets isolated config, data, and named volumes by setting
|
|
# SIGNUM in their .env file.
|
|
#
|
|
# Setup per user:
|
|
# 1. mkdir -p ~/<signum>/opencode-devbox && cd ~/<signum>/opencode-devbox
|
|
# 2. cp docker-compose.shared.yml docker-compose.yml
|
|
# 3. cp .env.shared.example .env
|
|
# 4. Edit .env with your signum, provider, keys, etc.
|
|
# 5. mkdir -p ~/<signum>/.config/opencode
|
|
# 6. docker compose up -d
|
|
#
|
|
# Volume isolation: the top-level 'name:' field uses SIGNUM to derive a
|
|
# unique project name (devbox-<signum>), which Docker Compose uses as the
|
|
# prefix for all named volumes. Without this, two users whose compose file
|
|
# lives in a directory with the same basename would share volumes — the
|
|
# Docker daemon is system-wide and doesn't scope by OS user.
|
|
|
|
name: devbox-${SIGNUM:?Set SIGNUM in .env}
|
|
|
|
services:
|
|
devbox:
|
|
image: joakimp/opencode-devbox:latest
|
|
container_name: devbox-${SIGNUM:?Set SIGNUM in .env}
|
|
stdin_open: true
|
|
tty: true
|
|
env_file:
|
|
- .env
|
|
environment:
|
|
- TERM=xterm-256color
|
|
volumes:
|
|
# Host workspace — user's project directory
|
|
- ${WORKSPACE_PATH:-~/src}:/workspace
|
|
|
|
# SSH keys — user-specific if available, else shared
|
|
- ${SSH_KEY_PATH:-~/.ssh}:/home/developer/.ssh:ro
|
|
|
|
# Opencode config — per-user (persists settings across restarts)
|
|
- ${HOME}/${SIGNUM}/.config/opencode:/home/developer/.config/opencode
|
|
|
|
# Persist opencode data (auth, memory, session history)
|
|
- devbox-data:/home/developer/.local/share/opencode
|
|
|
|
# Persist bash history across container recreations
|
|
- devbox-shell-history:/home/developer/.cache/bash
|
|
|
|
# Persist uv data (Python installs)
|
|
- devbox-uv:/home/developer/.local/share/uv
|
|
|
|
# Optional: AWS credentials (per-user if available)
|
|
# - ${HOME}/${SIGNUM}/.aws:/home/developer/.aws
|
|
|
|
volumes:
|
|
devbox-data:
|
|
devbox-shell-history:
|
|
devbox-uv:
|