Install 9Router on Debian 13 Using Docker
Debian 13 (Trixie) provides a robust, modern foundation for deploying containerized networking and web management applications. Running services inside Docker containers allows system administrators to isolate application runtimes, simplify dependency management, and ensure repeatable deployments across environments.
9Router provides network routing and management services accessible through a web interface. Deploying 9Router with Docker on Debian 13 isolates the application processes from the underlying host while maintaining fast network forwarding and streamlined maintenance cycles.
This guide walks you through preparing Debian 13, installing the Docker container engine from the official Debian repositories, configuring persistent container parameters, and verifying both the running service and its web management interface.
Prerequisites
- A clean Debian 13 (Trixie) virtual machine or server instance with root administrative privileges
- At least 2 vCPUs, 4 GB of RAM, and 40 GB of storage space
- Active outbound internet connectivity to retrieve Debian packages and container images
- Port 8080 available on the host interface for web management traffic
Key concepts
Containerization on Debian 13
Debian 13 integrates systemd cgroups v2 hierarchies and modern kernel networking features. Installing the native Docker engine provides an overlay2 storage driver and container bridge networking without requiring kernel patches or out-of-tree modules.
Port Forwarding and Container Bridging
Docker bridge networking isolates container network namespaces from the host. By mapping host port 8080 to container port 8080, docker-proxy and kernel iptables rules forward inbound traffic directly to the 9Router web dashboard.
Container Restart Policies
Using the ‘–restart unless-stopped’ directive ensures that the Docker daemon automatically restarts the 9Router container if it crashes or when the Debian host reboots, maintaining high availability for routing services.
1. Update Debian 13 Package Index
Before installing new software, synchronize the local package cache with the official Debian 13 mirrors. This ensures that package dependencies resolve cleanly and that the latest security updates are applied.
First refresh the available package information so the following installation uses the configured repositories.
apt-get update
2. Install Docker and Required Utilities
Install the native Docker container runtime and system utilities from the Debian archive. The docker.io package provides the Docker CLI and daemon, containerd provides the core container runtime, and curl allows local HTTP health checking.
Install the software packages and supporting libraries needed for this part of the setup. Wait until the package manager finishes before continuing.
apt-get install -y docker.io containerd curl
3. Enable and Start Docker Daemon
Register the Docker systemd unit to start automatically at system boot and immediately launch the daemon process. Verifying service status confirms that the container engine is active and ready to manage containers.
Enable automatic startup for the docker service, so it will start automatically on boot.
systemctl enable --now docker
Inspect the status of the docker service.
systemctl status docker --no-pager
4. Deploy 9Router Container
Launch the 9Router container in detached mode using Docker. Map host port 8080 to container port 8080 to make the web management dashboard accessible, and assign a restart policy to ensure high availability across reboots.
Launch the 9Router container in detached mode using Docker. Map host port 8080 to container port 8080 to make the web management dashboard accessible, and assign a restart policy to ensure high availability across reboots. Run the following command, preserved exactly from the validated recording, and check its result before moving on.
docker run -d \
--name 9router \
--restart unless-stopped \
-p 8080:20128 \
9router/9router:latest
5. Verify 9Router Service Health
Verify that the 9Router container is running properly and that the application is actively listening on TCP port 8080. A readiness check queries the local HTTP endpoint until the web server completes initialization.
Verify that the 9Router container is running properly and that the application is actively listening on TCP port 8080. A readiness check queries the local HTTP endpoint until the web server completes initialization. Run the following command, preserved exactly from the validated recording, and check its result before moving on.
docker ps --filter "name=9router"
for i in $(seq 1 30); do
if curl -s -f http://127.0.0.1:8080/ >/dev/null 2>&1; then
echo "9Router service is ready"
break
fi
sleep 2
done

6. Access 9Router Web Dashboard
Open the 9Router web user interface in the browser by navigating to http://YOUR_IP_ADDRESS:8080/. This connects to the containerized service and verifies that the web interface is rendered and operational.
Open http://YOUR_IP_ADDRESS:8080/ in your browser.
Replace YOUR_IP_ADDRESS with your server IP, or YOUR_DOMAIN with a domain pointing to your server, as applicable. The video shows the actual lab address, which can differ from yours. Use HTTPS only if it has been configured.
- Enter “123456” in the the indicated control field.
- Click the indicated control.

How the final setup works
The Debian 13 host runs the Linux kernel and systemd init system. The Docker daemon manages the 9Router container on an isolated Docker bridge network. Inbound HTTP connections to host port 8080 are routed through docker-proxy to the containerized 9Router web interface.
Troubleshooting
Port 8080 is already in use by another service
Likely cause: Another web service, proxy, or existing container is bound to TCP port 8080 on the host system.
Fix: Identify the conflicting process with ‘ss -tulpn | grep 8080’ and stop it, or map 9Router to an alternative host port such as ‘-p 8081:8080’.
Docker service fails to start or reports inactive state
Likely cause: Systemd unit failure or conflicting socket configurations can prevent dockerd or containerd from initializing.
Fix: Inspect systemd logs using ‘journalctl -xeu docker.service’ and restart the service using ‘systemctl restart docker’.
9Router container terminates immediately after launch
Likely cause: Missing configuration parameters, invalid port assignments, or memory constraints can cause the application process to exit.
Fix: Examine the container runtime logs using ‘docker logs 9router’ to diagnose application-level startup errors.
Web dashboard fails to load in the browser
Likely cause: The 9Router container may still be completing first-run initialization or internal database configuration.
Fix: Check container resource usage with ‘docker stats –no-stream 9router’ and test local port responsiveness using ‘curl -v http://localhost:8080’.
Useful commands
Check Docker Daemon Status
systemctl status docker --no-pager
View 9Router Container Logs
docker logs -f 9router
List Running Containers
docker ps
Inspect 9Router Container Metadata
docker inspect 9router
Restart 9Router Container
docker restart 9router
Monitor Container Resource Utilization
docker stats --no-stream 9router
Stop and Remove 9Router Container
docker stop 9router && docker rm 9router
Conclusion
You have successfully installed Docker on Debian 13 (Trixie) and deployed 9Router as an isolated container service. The Docker daemon is managed via systemd with automatic restart policies enabled, and the 9Router web dashboard is accessible on port 8080. You can now proceed to configure routing parameters, interface rules, and upstream network settings directly through the web interface.
- Installed and configured the Docker container runtime on Debian 13 with systemd integration.
- Deployed the 9Router container in detached mode with persistent restart policies and port 8080 mapping.
- Verified container execution and health using command-line diagnostics and local HTTP probes.
- Validated access to the running 9Router web management interface via the browser.