Halo, kalau kamu merasa tulisan saya ngebantu kamu, kamu bisa ucapkan terima kasih lewat saweria .

If you feel this website help you, you can donate at saweria .



Problem

Client complaint they can’t update their app on docker swarm cluster with error no suitable node (host-mode port already in use on 1 node) when they try to update app image.

Here’s their compose file

version: '3.8'

services:
  whoami:
    image: traefik/whoami
    ports:
      - target: 2001
        published: 2001
        mode: host
    command:
       # It tells whoami to start listening on 2001 instead of 80
       - --port=2001
       - --name=iamfoo
    deploy:
      #deploy at all server
      mode: global
      update_config:
        parallelism: 1
        delay: 10s
        order: start-first
        failure_action: rollback
      placement:
        constraints:
          - node.platform.os == linux

How To Fix The Problem

It was easy to fix that problem, you can check this github issue page .

We just need to change order to order: stop-first.

Here’s the full compose file

version: '3.8'

services:
  whoami:
    image: traefik/whoami
    ports:
      - target: 2001
        published: 2001
        mode: host
    command:
       # It tells whoami to start listening on 2001 instead of 80
       - --port=2001
       - --name=iamfoo
    deploy:
      #deploy at all server
      mode: global
      update_config:
        parallelism: 1
        delay: 10s
        #IT MUST USE stop-first!!!
        order: stop-first
        failure_action: rollback
      placement:
        constraints:
          - node.platform.os == linux

Here’s explanation about that at docker compose docs

order: Order of operations during rollbacks. 

One of stop-first (old task is stopped before starting new one).

start-first (new task is started first, and the running tasks briefly overlap) (default stop-first).

It means apps with network_mode: host cannot killed by new task, they must be stopped, then they will create a new task.