version: "3.9" services: traefik: image: traefik:latest container_name: traefik restart: unless-stopped environment: # Replace this placeholder with your DuckDNS token - DUCKDNS_TOKEN=03a4d8f7-695a-4f51-b66c-cc2fac555fc1 networks: - web ports: - "80:80" # http - "443:443" # https - "8089:8089" # traefik dashboard (secure it if exposed) volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./letsencrypt:/letsencrypt # <-- keep this directory inside WSL filesystem - ./traefik_dynamic.yml:/etc/traefik/traefik_dynamic.yml:ro command: - --api.insecure=false - --api.dashboard=true - --entrypoints.web.address=:80 - --entrypoints.websecure.address=:443 - --entrypoints.dashboard.address=:8089 - --providers.docker=true - --providers.docker.endpoint=unix:///var/run/docker.sock - --providers.docker.exposedbydefault=false - --providers.file.filename=/etc/traefik/traefik_dynamic.yml - --providers.file.watch=true - --certificatesresolvers.duckdns.acme.email=sterlenjohnson6@gmail.com - --certificatesresolvers.duckdns.acme.storage=/letsencrypt/acme.json - --certificatesresolvers.duckdns.acme.dnschallenge.provider=duckdns - --certificatesresolvers.duckdns.acme.dnschallenge.disablepropagationcheck=true whoami: image: containous/whoami:latest container_name: whoami restart: unless-stopped networks: - web labels: - "traefik.enable=true" - "traefik.http.routers.whoami.rule=Host(`whoami.sj98.duckdns.org`)" - "traefik.http.routers.whoami.entrypoints=websecure" - "traefik.http.routers.whoami.tls=true" - "traefik.http.routers.whoami.tls.certresolver=duckdns" networks: web: external: true