Files
ROMFASTSQL/proxmox/lxc102-docker
Claude Agent 874698a242 docs(lxc102): Docker + Portainer + Docker Sandboxes (sbx)
Documentează LXC 102 și depanarea erorii "500: failed to run sandbox
container" la crearea sandbox-urilor opencode: build docker-sbx pentru
Ubuntu 26.04 instalat pe Debian 13 (libsailor.so cere GLIBC_2.43),
userul work lipsă din grupul kvm și /usr/sbin absent din PATH
(mkfs.ext4 pentru snapshotter-ul erofs).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 19:27:45 +00:00
..

LXC 102 - Docker + Portainer + Docker Sandboxes (sbx)

Director: proxmox/lxc102-docker/ VMID: 102 IP intern: 10.0.20.113 | Tailscale: 100.73.147.55 Host Proxmox: pvemini (10.0.20.201) Rol: Host Docker general + Portainer + rulare agenți AI (opencode, Claude Code) izolați în Docker Sandboxes


Informații Container

Parametru Valoare
VMID 102
Hostname docker.romfast.ro
IP intern 10.0.20.113
Host Proxmox pvemini
Storage local-zfs (30GB)
RAM 4GB (swap 512MB)
CPU 4 cores
OS Debian 13 (trixie)
Features nesting=1,fuse=1
onboot da
Creat cu community-scripts ProxmoxVE — Docker LXC

Containerul are bind-mount pentru /dev/kvm (lxc.mount.entry: /dev/kvm dev/kvm none bind,optional,create=file) — obligatoriu pentru microVM-ul folosit de sbx.

Componente

Componentă Versiune Note
Docker Engine 29.6.x dockerd de sistem (root)
Portainer CE latest container portainer, porturi 9000 / 9443
Docker Sandboxes (sbx) 0.37.1 pachet docker-sbx, daemon per-user

Atenție: LXC 100 este un container separat, tot numit portainer. Portainer-ul activ folosit rulează în LXC 102.

User de lucru pentru sbx: work (uid 1000). Daemonul sandboxd pornește automat per-user la prima comandă sbx.


Comenzi uzuale

# Acces
ssh root@10.0.20.201 "pct exec 102 -- bash"

# Docker
ssh root@10.0.20.201 "pct exec 102 -- docker ps"

# sbx (întotdeauna ca user work, NU ca root)
ssh root@10.0.20.201 "pct exec 102 -- su - work -c 'sbx ls'"
ssh root@10.0.20.201 "pct exec 102 -- su - work -c 'sbx diagnose'"

# Creare sandbox + atașare (interactiv, din shell-ul lui work)
sbx create opencode /cale/proiect
sbx run --name <sandbox>
sbx tui                      # dashboard interactiv
sbx rm -f <sandbox>

# Daemon
sbx daemon status
sbx daemon stop

Log daemon (prima oprire când ceva nu merge): /home/work/.local/state/sandboxes/sandboxes/sandboxd/daemon.log


Cum funcționează sbx (relevant pentru depanare)

sbx nu folosește dockerd-ul de sistem. Are propriul containerd embedded, per-user, care pornește fiecare sandbox într-un microVM (runtime nerdbox, shim /usr/libexec/containerd-shim-nerdbox-v1, VMM în /usr/libexec/lib/libsailor.so). De aici rezultă trei dependențe de mediu care nu sunt evidente:

  1. acces read/write la /dev/kvm pentru userul care rulează sbx;
  2. mkfs.ext4 (din /usr/sbin) în PATH — snapshotter-ul erofs formatează layer-ul rw;
  3. un build al pachetului compatibil cu glibc-ul din container.

Erorile din TUI sunt mereu generice (500 Internal Server Error: failed to run sandbox container). Cauza reală e doar în daemon.log.


Depanare: "failed to run sandbox container" (rezolvat 2026-07-30)

La primul sandbox opencode, TUI-ul returna:

Failed to create sandbox: create local sandbox: create sandbox via POST /sandbox:
request failed: 500 Internal Server Error: failed to run sandbox container

sbx diagnose trecea toate cele 9 verificări — nu ajută la acest tip de eroare. Din daemon.log au rezultat trei probleme suprapuse, care se manifestau una după alta:

# Eroare în daemon.log Cauză Fix
1 creating ephemeral volume for "/var/lib/docker": unknown volume driver: block VMM nefuncțional (vezi #3); driver-ul block e oferit de runtime-ul microVM rezolvat de #3
2 mkfs.ext4 failed: exec: "mkfs.ext4": executable file not found in $PATH Debian nu pune /usr/sbin în PATH pentru useri non-root adăugat /usr/sbin în PATH-ul lui work
3 failed to create shim task: ttrpc: closed + libsailor.so: version GLIBC_2.43 not found era instalat build-ul Ubuntu 26.04 (resolute) pe Debian 13 (glibc 2.41) reinstalat build-ul noble (glibc 2.39)

În plus, userul work nu era în grupul kvm, deci shim-ul microVM nu putea deschide /dev/kvm.

Fix aplicat

# 1. build-ul corect: repo-ul Docker pentru Debian NU publică docker-sbx, doar cel de Ubuntu.
#    Pe Debian 13 (glibc 2.41) se folosește build-ul noble (glibc 2.39), NU resolute (cere glibc 2.43).
curl -fsSLO https://download.docker.com/linux/ubuntu/dists/noble/pool/stable/amd64/docker-sbx_0.37.1-1~ubuntu.24.04~noble_amd64.deb
apt-get install -y --allow-downgrades ./docker-sbx_0.37.1-1~ubuntu.24.04~noble_amd64.deb

# 2. acces la KVM (necesită re-login pentru user work)
usermod -aG kvm work

# 3. mkfs.ext4 în PATH — adăugat în /home/work/.profile
PATH="/usr/local/sbin:/usr/sbin:/sbin:$PATH"

Verificare finală: sbx create opencode . → sandbox running, iar în interior docker version returnează 29.6.1 (deci merge și varianta docker-in-docker a template-ului).

De reținut pentru viitor

  • Pachetul nu se actualizează cu apt upgrade — nu provine dintr-un repo configurat. La update, descarcă manual varianta ~noble. Dacă iei din greșeală ~resolute, sandbox-urile se rup din nou identic.
  • Dacă apare orice eroare 500 la creare: citește daemon.log, nu sbx diagnose.
  • Verificări rapide de mediu:
    su - work -c 'test -w /dev/kvm && echo KVM_OK; command -v mkfs.ext4; ldd /usr/libexec/lib/libsailor.so | grep "not found"'
    
    Toate trei trebuie să fie OK / fără output la ultima.
  • Există și un daemon sbx vechi rulând ca root (rămas de la instalarea inițială, binar șters, ~590MB RSS). Poate fi oprit cu sbx daemon stop ca root. Recomandat: sbx se folosește doar din userul work.
  • Sandbox-urile pot ieși în rețea doar prin proxy-ul sbx, către host-uri permise de politică (sbx policy).

Fișiere și căi importante

Cale Conținut
/home/work/.local/state/sandboxes/sandboxes/sandboxd/daemon.log log daemon sbx (sursa de adevăr la erori)
/home/work/.local/state/sandboxes/sandboxes/sandboxd/sandboxd.sock socket daemon
/usr/libexec/containerd-shim-nerdbox-v1 shim microVM
/usr/libexec/lib/libsailor.so bibliotecă VMM (sensibilă la versiunea de glibc)
/home/work/.profile conține fix-ul de PATH pentru mkfs.ext4