Stop, uninstall, and what stays behind#
You will end up with an app removed from the router's configuration, and its data still on disk. That second half is deliberate, and this page is mostly about it.
Before you start#
- The operator role and a licence.
- Knowing what else points at this app. A resolver forwarding to a container that no longer exists is a LAN with no DNS.
Step 1 — Find what depends on it#
Before removing anything, check whether an integration hint was ever accepted. Hints stage real configuration on other pages, and removing the app does not remove what a hint staged.
The common ones:
| App | What may point at it |
|---|---|
| AdGuard Home, Pi-hole, Blocky, Unbound | service dns forwarding name-server <container address> |
| dnsmasq | service dns forwarding domain <d> name-server <container address> |
| Any app with a web UI | A port forward, if you published it |
show configuration commands | match 10.99.0That finds anything in the configuration naming an address on the apps network.
Step 2 — Stop it first, if you are not sure#
Stopping stages set container name <app> disable, which keeps the whole declaration and
takes the container down. Commit that, live with it for a day, and see what breaks. Undoing
a stop is deleting one node.
Step 3 — Uninstall#
Services → Apps → the app → Uninstall.
delete container name adguardOne operation, into the Commit Bar, reviewed and committed like anything else.
Uninstalling a feature module — WireGuard, Suricata IDS — is different: the flag lives
in the agent's state, not the router configuration, so removing it is instant. But if the
feature is configured on the router, uninstalling hands you the delete operations for the
Commit Bar to review, and the page stays until they land. Wheelhouse never hides
configuration that exists.
What stays behind#
The container image also stays on the router. Apps → Images lists the images present and removes one that nothing uses:
R=https://<router>:8443
T=wh_...
curl -sk -X DELETE -H "Authorization: Bearer $T" \
"$R/api/apps/image?image=docker.io/adguard/adguardhome:latest"The image reference is a query parameter, not a body. The endpoint refuses an image an installed container still uses, with a 409 naming the container — remove the container first.
Step 4 — Clean up what pointed at it#
Whatever you found in step 1.
delete service dns forwarding name-server 10.99.0.5Do this in the same commit as the uninstall when you can, so there is no window where the resolver is forwarding into a hole.
Check it worked#
show container
show configuration commands | match containerAnd check the thing the app was doing. If it was your resolver, the check is that clients still resolve:
dig @192.0.2.1 example.comUndoing it#
Reinstall from the catalogue. The volume data is still there, so a reinstalled app comes back with its configuration.
Or roll back the revision — an app's declaration is part of the configuration, so rolling back a commit that uninstalled one restores it. It does not restore the image, if you also deleted that.
See also#
Checked against docs/apps.md ·
agent/apps.go ·
ui/src/pages/AppDetail.tsx ·
agent/catalog.json