Lists all containers without LAN-published ports across CT 104/105/109/110/111/112/113. Recommends keep-internal vs expose for each. Confirms the public/LAN/docker-internal tiering is clean across the fleet.
3.9 KiB
Docker-internal inventory
Live at http://192.168.1.8:13080/docker-internal-inventory/.
Containers that have no LAN-published port — reachable only on their Docker bridge network. This is the third tier of our access model:
- public — Zoraxy-routed via
*.nuclide.systems(internet-reachable) - LAN —
192.168.1.0/24direct (host port mapping) - docker-internal — only via container-to-container bridge (this doc)
Default per feedback_internal_only: keep new things at tier 2 or 3 unless there's a real external-access reason. Most of what is on tier 3 should stay there — that's the point of having three tiers.
Recommendation legend
- 🟢 Keep internal — sidecar / backend / engine, must not be exposed
- 🟡 Maybe — admin UI exists; could be useful to reach directly but low value
- 🔴 Expose to LAN — broken access pattern, fix recommended
CT 104 (docker host) — 43 internal-only
AI / MCP plumbing — all 🟢 keep internal
Backend MCP servers consumed only by the MCP gateway. Exposing them would bypass auth + audit.
mcp-proxmox,gitea-mcp,mcp-immich,mcp-fetch,mcp-time,mcp-git,mcp-gotify,mcp-unifi,mcp-ntfy,mcp-markitdown,mcp-context7,mcp-youtube-transcript,mcp-sequential-thinking,mcp-wikipedia-mcp,mcp-gitlab,mcp-crawl4ai,coder-mcp,ariel-mcp,paperless-mcp,claude-max-bridge- Plus the ephemeral
crazy_colden/stoic_kirch/etc. (auto-spawned MCP one-shots — Docker name collisions, no static port).
Backends for exposed services — 🟢 keep internal
karakeep_meilisearch,karakeep_chrome(Karakeep search + headless browser)immich_postgres,immich_redis,immich_machine_learning(Immich backends)immich_power_tools— 🟡 maybe. Power-user UI for Immich. Bind to LAN if you ever want to use it directly.paperless-ngx-tika-1,paperless-ngx-gotenberg-1,paperless-ngx-broker-1(Paperless OCR/PDF/redis)redis-searxng,rdtclient(auxiliary)
Diagrams — 🟢 keep internal
kroki,kroki-mermaid,kroki-excalidraw— rendered via MCP, no UI to expose.
Monitoring agents — 🟢 keep internal
node-exporter(scraped by Prometheus on:9100over container network; LAN exposure not needed since Prometheus is on the same LAN already)arcane-agent(talks back to Arcane server on CT 109)
CT 105 (nextcloud) — 8 internal-only
🟢 All keep internal — Nextcloud AIO architecture.
nextcloud-aio-nextcloud(fronted by AIO apache proxy on:11000)nextcloud-aio-database(Postgres),nextcloud-aio-redis,nextcloud-aio-imaginary,nextcloud-aio-notify-push,nextcloud-aio-collabora,nextcloud-aio-docker-socket-proxyarcane-agent
Exposing the AIO backends directly would break Nextcloud's auth model and crash backups.
CT 109 (ops) — 1 internal-only
node-exporter— 🟢 keep internal. Scraped viahost.docker.internalfrom Prometheus on the same host.
CT 110 / 111 / 112 / 113 — arcane-agent only
🟢 All keep internal. The Arcane agent on each Docker host calls back to the Arcane server on 192.168.1.8:10002; no inbound LAN traffic needed.
Plus:
- CT 111:
act-runner🟢 (Gitea Actions runner — outbound to Gitea API; never needs inbound) - CT 112:
infisical-db,infisical-redis🟢 (Infisical app on:8200is the only intended entry)
Cross-tier issues spotted
None. The 3-tier model is clean across the fleet:
- No backend Postgres/Redis is accidentally LAN-bound
- No MCP server is double-exposed
- No admin UI is bound to LAN when it shouldn't be
Candidate LAN-bind, if you want them
If you ever want direct LAN access to one of the 🟡 services, the pattern is to add a ports: line to its compose entry:
| Service | Suggested port | Why you might |
|---|---|---|
immich_power_tools |
:3001 on CT 104 |
Bulk Immich operations (album merge, dedup) the main UI doesn't expose |
Everything else: leave at tier 3.