Having different version of docker running on different nodes, it happens to experiencing problems.
Docker Swarm is a community project maintained in https://github.com/moby/moby github repository, it lack a number of features that are provided by kubernetes, but still someone is using this for experimental and bridge-to-kubernetes, because it is very simple to understand and manage.
Of course, it requires a number of prerequisites, like to have a good firewall protecting it.
Today I touched an old installation with 5 nodes and different operative system, likely I was able to update some of those nodes and keep the system running (with a small out-of-service of about 5 minutes, that was acceptable for this kind of service level: experimental).

Some of the VMs was on Debian 10, that is not maintained, so I decided to update to Debian 11 by changing the /etc/apt/sources.list:
deb http://deb.debian.org/debian/ bullseye main
deb-src http://deb.debian.org/debian/ bullseye main
deb http://security.debian.org/bullseye-security bullseye-security/updates main
deb-src http://security.debian.org/bullseye-security bullseye-security/updates main
deb http://deb.debian.org/debian/ bullseye-updates main
deb-src http://deb.debian.org/debian/ bullseye-updates main
Then by run:
apt-get clean
apt-get -y update
apt-get -y upgrade --without-new-pkgs
apt-get -y full-upgrade
shutdown -r now
Everything worked fine, it seems, but really some service was not running, I tryed
systemctl status docker.service
And error was about:
error reading the kernel parameter net.ipv4.neigh.default.gc_thresh3" error="open /proc/sys/net/ipv4/neigh/default/gc_thresh3: no such file or directory"
Really what is needed is:
modprobe ip_vs
And also add in a file in /etc/modules-load.d/ ip_vs
In fact ip_vs implement transport layer load balancing, and this is foundamental for dealing with overlay networks, where the docker swarm run
Reference