5.2 KiB
title, weight, description, keywords
| title | weight | description | keywords | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Docker | 7 | Self-host RustDesk Server OSS with Docker, Docker Compose, or Podman. Review the required ports, host networking notes, and sample container definitions for hbbs and hbbr. |
|
Use this guide to self-host RustDesk Server OSS with Docker, Docker Compose, or Podman and to open the correct ports for hbbs and hbbr.
What is the best way to run RustDesk Server OSS in Docker?
For most Linux deployments, Docker Compose with network_mode: "host" is the simplest and most reliable option. It keeps the setup repeatable, makes upgrades easier, and avoids extra port-mapping complexity when host networking is available.
Docker deployment checklist
- Install Docker or Podman.
- Create a persistent data directory or volume for
hbbsandhbbr. - Open the required RustDesk ports in your firewall.
- Start
hbbsandhbbrwith Docker Compose,docker run, or Podman Quadlet. - Point clients to the new self-hosted server and verify registration and relay traffic.
Which container setup should you choose?
| Method | Best for | Why you would use it |
|---|---|---|
| Docker Compose | Most Linux servers | Repeatable setup and easier ongoing maintenance |
docker run |
Quick manual testing | Fastest way to start a simple pair of containers |
| Podman Quadlet | Podman plus systemd environments | Native systemd-style service management |
Here is another good tutorial: Building Your Own Remote Desktop Solution: RustDesk Self-Hosted on Cloud with Docker (Hetzner)
Install your own server with Docker
Requirements
You need to have Docker/Podman installed to run a rustdesk-server as a Docker container. If in doubt, install Docker with this guide to ensure it's the most up to date!
Be sure to open these ports in the firewall:
hbbs:21114(TCP): used for web console, only available inProversion.21115(TCP): used for the NAT type test.21116(TCP/UDP): Please note that21116should be enabled both for TCP and UDP.21116/UDPis used for the ID registration and heartbeat service.21116/TCPis used for TCP hole punching and connection service.21118(TCP): used to support web clients.
hbbr:21117(TCP): used for the Relay services.21119(TCP): used to support web clients.
If you do not need web client support, the corresponding ports 21118, 21119 can be disabled.
Docker examples
sudo docker image pull rustdesk/rustdesk-server
sudo docker run --name hbbs -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs
sudo docker run --name hbbr -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr
{{% notice note %}}
--net=host only works on Linux, which makes hbbs/hbbr see the real incoming IP Address rather than the Container IP (172.17.0.1).
If --net=host works fine, the -p options are not used. If on Windows, leave out sudo and --net=host.
Please remove --net=host if you are having connection problems on your platform.
{{% /notice %}}
{{% notice note %}}
If you cannot see logs with -td, you can see logs via docker logs hbbs. Or you can run with -it, hbbs/hbbr will not run as daemon mode.
{{% /notice %}}
Docker Compose examples
For running the Docker files with the compose.yml as described here you need to have Docker Compose installed.
services:
hbbs:
container_name: hbbs
image: rustdesk/rustdesk-server:latest
command: hbbs
volumes:
- ./data:/root
network_mode: "host"
depends_on:
- hbbr
restart: unless-stopped
hbbr:
container_name: hbbr
image: rustdesk/rustdesk-server:latest
command: hbbr
volumes:
- ./data:/root
network_mode: "host"
restart: unless-stopped
If you need to make config changes e.g. set ALWAYS_USE_RELAY=Y you can use environment in the docker-compose.yml
services:
hbbs:
container_name: hbbs
image: rustdesk/rustdesk-server:latest
environment:
- ALWAYS_USE_RELAY=Y
command: hbbs
volumes:
- ./data:/root
network_mode: "host"
depends_on:
- hbbr
restart: unless-stopped
hbbr:
container_name: hbbr
image: rustdesk/rustdesk-server:latest
command: hbbr
volumes:
- ./data:/root
network_mode: "host"
restart: unless-stopped
Podman Quadlet examples
If you would like to run the containers with Podman as a systemd service you can use these sample Podman Quadlet configurations:
[Container]
AutoUpdate=registry
Image=rustdesk/rustdesk-server:latest
Exec=hbbs
Volume=/path/to/rustdesk-server/data:/root
Network=host
[Service]
Restart=always
[Install]
WantedBy=default.target
or
[Container]
AutoUpdate=registry
Image=rustdesk/rustdesk-server:latest
Exec=hbbr
Volume=/path/to/rustdesk-server/data:/root
Network=host
[Service]
Restart=always
[Install]
WantedBy=default.target