From homelab
Playbook for anything on the TrueNAS host — consult before touching services, data, or containers. Covers SSH entry, container interaction, and data/layout notes so you can operate safely on TrueNAS.
How this skill is triggered — by the user, by Claude, or both
Slash command
/homelab:truenas-docker-opsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- Connect: `ssh truenas` (auth pre-configured)
ssh truenas (auth pre-configured)ansiblonomicon repo folder (in ansible/stacks/)/mnt/performance/docker/stacks/<stack>/compose.yaml/mnt/performance/docker/<stack>//mnt/capacity/watch/<container>/ansible/inventory/group_vars/truenas.yml in ansiblonomicon| Task | Command |
|---|---|
| List containers | ssh truenas docker ps |
| Filter containers | ssh truenas docker ps | grep <name> |
| View compose | ssh truenas cat /mnt/performance/docker/stacks/<stack>/compose.yaml |
| View logs | ssh truenas docker logs <container> |
| Exec command | ssh truenas docker exec -i <container> <command> |
| Inspect | ssh truenas docker inspect <container> |
Stacks are deployed via Ansible, not manually:
# From ansiblonomicon repo
poe truenas # Full playbook
poe truenas -t stacks # Just stacks
but you can run ad-hoc commands against the docker containers/compose files on the truenas host. Changes will not be preserved unless they are made to the ansiblonomicon repo.
/mnt/capacity/watch/anypod/data (binds to /data in container)
media/<feed_id>/transcripts/<feed_id>//data/db/anypod.dbfeed (PK id; feed metadata, source info, timestamps, counters)download (PK feed_id, id; per-episode info, status, transcript fields)appstate (PK id; last_yt_dlp_update, other global state)scripts/docker_exec_python.sh <container> '<python_code>'
scripts/docker_exec_python.sh anypod '
import sqlite3, json
conn = sqlite3.connect("/data/db/anypod.db")
conn.row_factory = sqlite3.Row
rows = conn.execute("SELECT * FROM feed").fetchall()
print(json.dumps([dict(r) for r in rows], indent=2))
conn.close()
'
Note: Default interpreter is
/app/.venv/bin/python(works for anypod). Override withCONTAINER_PYTHON:CONTAINER_PYTHON=/usr/bin/python3 scripts/docker_exec_python.sh your-container 'print("hi")'
scripts/docker_exec_sqlite.sh <container> <db_path> '<sql_query>'
scripts/docker_exec_sqlite.sh anypod /data/db/anypod.db '
SELECT feed_id, status, COUNT(*) AS count
FROM download
GROUP BY feed_id, status;
'
docker exec: Simple commands, logs, inspection# Is anypod running?
ssh truenas docker ps | grep anypod
# View anypod compose
ssh truenas cat /mnt/performance/docker/stacks/anypod/compose.yaml
# Query anypod DB
scripts/docker_exec_sqlite.sh anypod /data/db/anypod.db "SELECT * FROM feed;"
npx claudepluginhub thurstonsand/ansiblonomicon --plugin homelabDocker and Podman container management: Dockerfile optimization, multi-stage builds, Compose v2 orchestration, networking, volumes, security hardening, supply chain integrity, health checks, resource limits, Quadlet systemd integration, and debugging. Invoke whenever task involves any interaction with containers — writing Dockerfiles, configuring Compose, managing Podman Quadlets, reviewing container security, debugging container issues, or setting up image signing and scanning.
Manages Polar's Docker local dev environment: start/stop/restart services, view/follow logs, shell access, status checks for FastAPI API, Next.js web, PostgreSQL, Redis.
Configures Docker Compose networks for service communication and isolation, covering default bridge networks, custom bridges, overlay networks, aliases, and service discovery in multi-container apps.