[Docker][Swarm] Getting error `Bridge channel send: no open channel` error with docker swarm

I’m getting Bridge channel send: no open channel error in console when second user joined the meeting. I’m using docker swarm and running every service on a separate VM(IBM cloud). Opened port 443, 4443', 10000, 5222, 5347` for every VM(for both private and public Ip ). nodes in docker swarm are talking on private-ip.

I’m using Traefik for Letsencrypt. Using latest docker images and Brave browser.
It is possible to replicate JVB using docker-swarm?

Config

version: '3.8'

services:
    # Frontend
    web:
        image: jitsi/web
        environment:
            ENABLE_AUTH:
            ENABLE_GUESTS:
            ENABLE_RECORDING: 1
            ENABLE_TRANSCRIPTIONS:
            ETHERPAD_URL_BASE:
            DISABLE_HTTPS: 1
            JICOFO_AUTH_USER: focus
            PUBLIC_URL: https://meet.example.in
            XMPP_DOMAIN: meet.example.in
            XMPP_AUTH_DOMAIN: auth.meet.example.in
            XMPP_BOSH_URL_BASE: http://xmpp.meet.example.in:5280
            XMPP_GUEST_DOMAIN: guest.meet.example.in
            XMPP_MUC_DOMAIN: muc.meet.example.in
            XMPP_RECORDER_DOMAIN: recorder.meet.example.in
            TZ: Asia/Kolkata
            JIBRI_BREWERY_MUC: jibribrewery
            JIBRI_PENDING_TIMEOUT: 90
            JIBRI_XMPP_USER: jibri
            JIBRI_XMPP_PASSWORD: 160135fb81b8f78232b26df486880b81
            JIBRI_RECORDER_USER: recorder
            JIBRI_RECORDER_PASSWORD: 46ea1b0e6252479eb6cc647bed7cfc18
        deploy:
          replicas: 1
          update_config:
            failure_action: rollback
          restart_policy:
            condition: on-failure
            delay: 5s
            max_attempts: 5
          placement:
            constraints:
              - node.hostname != vs1
              - node.role == manager

          labels:
            - "traefik.enable=true"
            - "traefik.docker.network=proxy"
            ### http
            - "traefik.http.routers.jitsi.entrypoints=web"
            - "traefik.http.routers.jitsi.rule=Host(`meet.example.in`)"
            ### https
            - "traefik.http.routers.jitsi-secure.entrypoints=websecure"
            - "traefik.http.routers.jitsi-secure.rule=Host(`meet.example.in`)"
            ### assigning middleware
            - "traefik.http.routers.jitsi.middlewares=jitsi-https-redirect"
            ### assigning service
            - "traefik.http.routers.jitsi-secure.service=jitsi" #here service name is jitsi

            ## Middleware
            - "traefik.http.middlewares.jitsi-https-redirect.redirectscheme.scheme=https"
            - "traefik.http.middlewares.jitsi-https-redirect.redirectscheme.permanent=true"
            
            ## LetsEncrypt
            - "traefik.http.routers.jitsi-secure.tls=true"
            - "traefik.http.routers.jitsi-secure.tls.certresolver=letsencrypt"
            - "traefik.http.routers.jitsi-secure.tls.domains[0].main=meet.example.in"

            ## Service
            - "traefik.http.services.jitsi.loadbalancer.server.port=80"

        volumes:
            - ${CONFIG}/web:/config

        ports:
            - target: 80
        networks:
          proxy:
          jitsi:
            aliases:
                    #- web.meet.example.in
              - meet.example.in

    # XMPP server
    prosody:
        image: jitsi/prosody
        hostname: xmpp.meet.example.in
        deploy:
          replicas: 1
          update_config:
            failure_action: rollback
          restart_policy:
            condition: on-failure
            delay: 5s
            max_attempts: 5
          placement:
            constraints: [node.hostname != vs1]
        environment:
            AUTH_TYPE:
            ENABLE_AUTH:
            GLOBAL_CONFIG:
            GLOBAL_MODULES:
            LDAP_AUTH_METHOD:
            LDAP_URL:
            LDAP_TLS_CACERT_FILE:
            LDAP_TLS_CACERT_DIR:
            LDAP_BINDPW:
            LDAP_FILTER:
            LDAP_TLS_CHECK_PEER:
            LDAP_START_TLS:
            LDAP_VERSION:
            JICOFO_COMPONENT_SECRET: e7f79f7a16a1b6a8bd5c18327d9bdace
            JICOFO_AUTH_USER: focus
            JICOFO_AUTH_PASSWORD: b44d6f8dd2af24a03fded73ebaa3ae2a
            JVB_AUTH_USER: jvb
            JVB_AUTH_PASSWORD: f8412a7d2f9821e8e9313fb6dad86a02
            PUBLIC_URL: https://meet.example.in
            XMPP_DOMAIN: meet.example.in
            XMPP_AUTH_DOMAIN: auth.meet.example.in
            XMPP_BOSH_URL_BASE: http://xmpp.meet.example.in:5280
            XMPP_GUEST_DOMAIN: guest.meet.example.in
            XMPP_MUC_DOMAIN: muc.meet.example.in
            XMPP_INTERNAL_MUC_DOMAIN: internal-muc.meet.example.in
            XMPP_RECORDER_DOMAIN: recorder.meet.example.in
            XMPP_MODULES:
            XMPP_MUC_MODULES:
            XMPP_INTERNAL_MUC_MODULES:
            TZ: Asia/Kolkata
            JIGASI_XMPP_USER: jigasi
            JIGASI_XMPP_PASSWORD: 1c59269877257b39cc0475b21cf08a16
            JIBRI_BREWERY_MUC: jibribrewery
            JIBRI_PENDING_TIMEOUT: 90
            JIBRI_XMPP_USER: jibri
            JIBRI_XMPP_PASSWORD: 160135fb81b8f78232b26df486880b81
            JIBRI_RECORDER_USER: recorder
            JIBRI_RECORDER_PASSWORD: 46ea1b0e6252479eb6cc647bed7cfc18
            JWT_APP_ID:
            JWT_APP_SECRET: something long goes here
            JWT_ACCEPTED_ISSUERS:
            JWT_ALLOW_EMPTY:
            JWT_AUTH_TYPE:
            JWT_TOKEN_AUTH_MODULE:
            JWT_ACCEPTED_AUDIENCES:
            JWT_ASAP_KEYSERVER:
            LOG_LEVEL: Debug
        volumes:
            - ${CONFIG}/prosody:/config
            - ${CONFIG}/prosody:/etc/prosody

        ports:
            - target: 5222
              published: 5222
              #mode: host
            - target: 5347
              published: 5347
              #mode: host
            - target: 5280
              published: 5280
              #mode: host

        networks:
          jitsi:
             aliases:
                     #- meet.example.in
               - xmpp.meet.example.in
                 #- auth.meet.example.in
                 #- guest.meet.example.in
                 #- muc.meet.example.in
                 #- internal-muc.meet.example.in
                 #- focus.meet.example.in

    # Focus component
    jicofo:
        image: jitsi/jicofo

        deploy:
          replicas: 1
          update_config:
            failure_action: rollback
          restart_policy:
            condition: on-failure
            delay: 5s
            max_attempts: 5
          placement:
            constraints: [node.hostname != vs1]
        environment:
            ENABLE_AUTH:
            JICOFO_COMPONENT_SECRET: e7f79f7a16a1b6a8bd5c18327d9bdace
            JICOFO_AUTH_USER: focus
            JICOFO_AUTH_PASSWORD: b44d6f8dd2af24a03fded73ebaa3ae2a
            JICOFO_RESERVATION_REST_BASE_URL:
            XMPP_DOMAIN: meet.example.in
            XMPP_AUTH_DOMAIN: auth.meet.example.in
            XMPP_INTERNAL_MUC_DOMAIN: internal-muc.meet.example.in
            XMPP_SERVER: xmpp.meet.example.in
            TZ: Asia/Kolkata
            JIBRI_BREWERY_MUC: jibribrewery
            JIBRI_PENDING_TIMEOUT: 90
            JVB_BREWERY_MUC: jvbbrewery
            JIGASI_BREWERY_MUC: jigasibrewery
        depends_on:
            - prosody
        volumes:
            - ${CONFIG}/jicofo:/config
        networks:
            jitsi:

    # Video bridge
    jvb:
        image: jitsi/jvb
        ports:
          - target: 10000
            published: 10000
            #mode: host
            protocol: udp
          - target: 4443
            published: 4443
            #mode: host
            protocol: tcp

        deploy:
          replicas: 2
          rollback_config:
            parallelism: 1
            delay: 5s
            failure_action: continue
            monitor: 10s
            order: stop-first
          update_config:
            parallelism: 1
            delay: 5s
            failure_action: rollback
            order: start-first
          restart_policy:
            condition: on-failure
            delay: 5s
            #max_attempts: 5
          placement:
            max_replicas_per_node: 1
            constraints:
              - "node.hostname!=vs1"
              - "node.role==worker"

        environment:
            XMPP_INTERNAL_MUC_DOMAIN: internal-muc.meet.example.in
            XMPP_AUTH_DOMAIN: auth.meet.example.in
            XMPP_SERVER: xmpp.meet.example.in
            TZ: Asia/Kolkata
            JIBRI_BREWERY_MUC: jibribrewery
            JIBRI_PENDING_TIMEOUT: 90
            JVB_AUTH_USER: jvb
            JVB_AUTH_PASSWORD: f8412a7d2f9821e8e9313fb6dad86a02
            JVB_BREWERY_MUC: jvbbrewery
            JVB_PORT: 10000
            JVB_TCP_HARVESTER_DISABLED: 0
            JVB_TCP_PORT: 4443
            JVB_STUN_SERVERS: stun.l.google.com:19302,stun1.l.google.com:19302,stun2.l.google.com:19302
            JVB_ENABLE_APIS: rest,colibri
        depends_on:
            - prosody
        volumes:
            - ${CONFIG}/jvb:/config
        networks:
            jitsi:
              aliases:
                - jvb.meet.example.in


# Custom network so all services can communicate using a FQDN
networks:
  proxy:
    external: true
    name: proxy
  jitsi:
    external: true    
    name: jitsi

I’m able to resolve it.

  1. changed the docker images to 4416 tag.
  2. changed the mode:host under ports section for jvb.