Se você não quiser que o nó execute nenhum container, você pode drenar
docker node update swarm-01.local --availability drain
Isso moverá qualquer contêiner em execução no modo swarm (cluster) para qualquer outro nó disponível. Os contêineres que não estão conscientes do swarm (iniciados com) docker run
continuarão sendo executados lá.
O comportamento descrito na sua segunda pergunta destina-se a evitar a interrupção do serviço para o usuário final, deslocando desnecessariamente (parando / iniciando) os contêineres, para referência, consulte: link
When you add a new node to a swarm, or a node reconnects to the swarm after a period of unavailability, the swarm does not automatically give a workload to the idle node. This is a design decision. If the swarm periodically shifted tasks to different nodes for the sake of balance, the clients using those tasks would be disrupted. The goal is to avoid disrupting running services for the sake of balance across the swarm. When new tasks start, or when a node with running tasks becomes unavailable, those tasks are given to less busy nodes. The goal is eventual balance, with minimal disruption to the end user.