# Running Docker Swarm on Linux VPS
Source: https://vpsdime.com/knowledgebase/technical-questions/docker-swarm
Last reviewed: 2026-07-02
Summary: Docker Swarm works on Linux VPS with one adjustment, use DNS round-robin endpoint mode (dnsrr) instead of the default virtual-IP mode, which relies on ipvs that our Linux VPS platform doesn't provide. How to set it per service and in stack files.

## What this is

**Docker Swarm works on Linux VPS**, with one adjustment you need to know up front: create your services with **`dnsrr` endpoint mode** instead of the default.

By default, Swarm gives each service a virtual IP and balances traffic to it using **ipvs**, a kernel load-balancing feature our Linux VPS platform doesn't provide. Services created in the default mode will misbehave. The built-in alternative, **DNS round-robin (`dnsrr`)**, skips the virtual IP entirely: Swarm's internal DNS returns the IPs of the service's replicas directly, and that works fine here.

## How to use dnsrr

Per service:

```
docker service create --name web --endpoint-mode dnsrr myimage
```

In a stack/compose file:

```yaml
services:
  web:
    image: myimage
    deploy:
      endpoint_mode: dnsrr
```

## What dnsrr changes in practice

- **Published ports:** `dnsrr` doesn't do the routing-mesh style `--publish` (mode `ingress`). Publish in **host mode** instead (`--publish published=80,target=80,mode=host`) or, more commonly, put a **reverse proxy** (Traefik, nginx, Caddy) in front, Traefik in particular works naturally with dnsrr services, discovering replicas through Swarm.
- **Service-to-service traffic** inside the overlay network just works: containers resolve the service name and get replica IPs.
- If you've seen older errors about `br_netfilter` when initializing Swarm on our platform, that era is over, current Linux VPS need only the endpoint-mode adjustment described here.

## Panels built on Swarm: EasyPanel

Some server panels run on Swarm under the hood, **[EasyPanel](https://easypanel.io/)** is the common one, which means a fresh install on a Linux VPS creates its services in the default VIP mode and they misbehave (typically as persistent **[502 errors](https://vpsdime.com/knowledgebase/troubleshooting/502-503-errors)** on every deployed app). EasyPanel doesn't currently expose an endpoint-mode setting in its UI, so convert its services from the shell:

```
docker service update --endpoint-mode dnsrr easypanel
```

And the same for **every other service** it has created, list them and convert in one pass:

```
docker service ls --format '{{.Name}}'
for s in $(docker service ls -q); do docker service update --endpoint-mode dnsrr $s; done
```

Keep in mind the panel creates a **new service per app you deploy**, and new services come up in the default mode again, re-run the update for newly deployed apps (or the loop above after adding several).

## If you'd rather have stock behavior

**Premium VPS** is full KVM, a plain kernel of your own, so Swarm's default ipvs mode (and everything else) behaves exactly as on bare metal.

## Still need help?

You can [open a support ticket](https://vpsdime.com/open-ticket/). So we can help on the first reply, it's worth mentioning:

- the VPS hostname or IP,
- the service's endpoint mode (from `docker service inspect`),
- the symptom (502s, an unreachable service, a panel like EasyPanel involved).

## Related questions

- "Does Docker Swarm work on your Linux VPS?"
- "What is endpoint-mode dnsrr and why do I need it?"
- "My Swarm service isn't reachable on its virtual IP."
- "How do I publish ports with dnsrr?"
- "EasyPanel apps all return 502 on my Linux VPS, how do I fix it?"
- "How do I switch every Swarm service to dnsrr at once?"
