teams-for-linux Docker & Self-Hosted Deployment

GitHub

Unofficial Microsoft Teams for Linux client

4,726 stars JavaScript JavaScript 1 file ยท ~1,173 tokens #electron#linux#microsoft#teams
RAW Compose
1. Pull Image (DOCKERHUB) docker pull library/cross-distro-ubuntu
2. Docker Run (1-Click Launch) docker run -d --name teams-for-linux -p 6081:6081 --restart always cross-distro-ubuntu
3. Podman Run podman run -d --name teams-for-linux -p 6081:6081 --restart always cross-distro-ubuntu
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/library/cross-distro-ubuntu:latest
5. ORAS Pull (OCI Artifact) oras pull cross-distro-ubuntu
6. Compose Deployment docker compose up -d
tests/cross-distro/docker-compose.yml
Download .yml
# Cross-Distro Testing for Teams for Linux
# 3 distros x 3 display servers = 9 test configurations
#
# Usage:
#   docker compose up ubuntu-x11          # Single config
#   docker compose up ubuntu-x11 fedora-wayland  # Multiple configs
#
# Access via browser: http://localhost:<noVNC_PORT>/vnc.html
# Access via VNC client: localhost:<VNC_PORT>

x-common: &common
  platform: linux/amd64
  shm_size: "4gb"
  # seccomp=unconfined is required for Sway/wlroots headless backend to
  # function inside Docker. SYS_PTRACE is needed for Electron's sandbox
  # and crash reporter. SYS_ADMIN and SYS_NICE are needed for Sway on
  # Fedora 41+ (wlroots process management). These weaken container
  # isolation, so ports are bound to localhost only (see below).
  security_opt:
    - seccomp=unconfined
  cap_add:
    - SYS_PTRACE
    - SYS_ADMIN
    - SYS_NICE
  volumes:
    - ./app:/app:ro
    # Persist login session and app config across container restarts
    - ./session:/home/tester/.config/teams-for-linux
    # Mount project source for running Playwright tests inside the container
    - ../../:/src:ro
  environment: &common-env
    SCREEN_RESOLUTION: "1920x1080x24"
    # Software rendering -- no physical GPU in containers
    LIBGL_ALWAYS_SOFTWARE: "1"
    MESA_GL_VERSION_OVERRIDE: "3.3"
    # Set APP_URL to download an AppImage at startup (e.g. CI artifact or release URL)
    APP_URL: "${APP_URL:-}"
    # Set AUTO_LAUNCH=false to skip auto-starting the app
    AUTO_LAUNCH: "${AUTO_LAUNCH:-true}"
    # Extra flags to pass to the app (e.g. --spellChecker.enabled=false)
    APP_FLAGS: "${APP_FLAGS:-}"

# ============================================================
# Ubuntu 24.04
# ============================================================
services:
  ubuntu-x11:
    <<: *common
    image: cross-distro-ubuntu
    build:
      context: .
      dockerfile: dockerfiles/ubuntu.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: x11
    ports:
      - "127.0.0.1:6081:6080"
      - "127.0.0.1:5901:5900"

  ubuntu-wayland:
    <<: *common
    image: cross-distro-ubuntu
    build:
      context: .
      dockerfile: dockerfiles/ubuntu.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: wayland
    ports:
      - "127.0.0.1:6082:6080"
      - "127.0.0.1:5902:5900"

  ubuntu-xwayland:
    <<: *common
    image: cross-distro-ubuntu
    build:
      context: .
      dockerfile: dockerfiles/ubuntu.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: xwayland
    ports:
      - "127.0.0.1:6083:6080"
      - "127.0.0.1:5903:5900"

  # ============================================================
  # Fedora 41
  # ============================================================
  fedora-x11:
    <<: *common
    image: cross-distro-fedora
    build:
      context: .
      dockerfile: dockerfiles/fedora.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: x11
    ports:
      - "127.0.0.1:6084:6080"
      - "127.0.0.1:5904:5900"

  fedora-wayland:
    <<: *common
    image: cross-distro-fedora
    build:
      context: .
      dockerfile: dockerfiles/fedora.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: wayland
    ports:
      - "127.0.0.1:6085:6080"
      - "127.0.0.1:5905:5900"

  fedora-xwayland:
    <<: *common
    image: cross-distro-fedora
    build:
      context: .
      dockerfile: dockerfiles/fedora.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: xwayland
    ports:
      - "127.0.0.1:6086:6080"
      - "127.0.0.1:5906:5900"

  # ============================================================
  # Debian Bookworm
  # ============================================================
  debian-x11:
    <<: *common
    image: cross-distro-debian
    build:
      context: .
      dockerfile: dockerfiles/debian.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: x11
    ports:
      - "127.0.0.1:6087:6080"
      - "127.0.0.1:5907:5900"

  debian-wayland:
    <<: *common
    image: cross-distro-debian
    build:
      context: .
      dockerfile: dockerfiles/debian.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: wayland
    ports:
      - "127.0.0.1:6088:6080"
      - "127.0.0.1:5908:5900"

  debian-xwayland:
    <<: *common
    image: cross-distro-debian
    build:
      context: .
      dockerfile: dockerfiles/debian.Dockerfile
    environment:
      <<: *common-env
      DISPLAY_SERVER: xwayland
    ports:
      - "127.0.0.1:6089:6080"
      - "127.0.0.1:5909:5900"