Hardened, DNSSEC-validating recursive DNS resolver built on iron-alpine.
Runs Unbound as a pure recursive DNS resolver using Unbound's default configuration. No forwarding — queries root nameservers directly with DNSSEC validation.
Designed as a reusable base image for building custom hardened Unbound containers. Downstream images can install additional packages, add their own configuration, then call post-install.sh to lock the image down.
FROM sureserver/hardened-unbound:latest
ADD --chown=unbound:unbound my-unbound.conf /etc/unbound/unbound.conf
# Lock down after all customization is done
RUN $APP_DIR/post-install.sh
post-install.sh removes apk, sets strict file permissions, and removes chown.
docker run -d --name=hardened-unbound -p 53:53/tcp -p 53:53/udp --restart=always sureserver/hardened-unbound:latest
Then point your DNS client to 127.0.0.1 as an upstream resolver.
docker run -d --name=hardened-unbound --restart=always sureserver/hardened-unbound:latest
Use the container IP as upstream in your resolver (Pi-hole, etc.).
docker run -d --name=hardened-unbound \
-v /path/to/unbound.conf:/etc/unbound/unbound.conf:ro \
-p 53:53/tcp -p 53:53/udp \
--restart=always sureserver/hardened-unbound:latest
podman run -d --name=hardened-unbound -p 53:53/tcp -p 53:53/udp --restart=always sureserver/hardened-unbound:latest
tini as PID 1 for signal handling and zombie reapingpost-install.sh available for final lockdown (removes apk, locks permissions, removes chown)linux/amd64 | linux/arm/v7 | linux/arm64 | linux/riscv64
MIT
Content type
Image
Digest
sha256:514b18b3e…
Size
14.8 MB
Last updated
3 days ago
docker pull sureserver/hardened-unbound