Si querés servir contenedores con Traefik y tener HTTPS automático con Let’s Encrypt, esto es lo mínimo que necesitás:


Docker Compose mínimo#


networks:
  traefik:
    external: true

services:
  traefik:
    image: traefik:v3.5
    container_name: traefik
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.letsencrypt.acme.email=hola@example.com"
      - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./letsencrypt:/letsencrypt
    networks:
      - traefik

  whoami:
    image: traefik/whoami
    container_name: whoami
    labels:
      - traefik.enable=true
      - traefik.docker.network=traefik
      - traefik.http.routers.whoami.rule=Host(\"example.com\")
      - traefik.http.routers.whoami.entrypoints=websecure
      - traefik.http.routers.whoami.tls=true
      - traefik.http.routers.whoami.tls.certresolver=letsencrypt
    networks:
      - traefik

Uso#

  1. Creamos la red de traefik:
docker network create traefik

Levantamos el servicio de ejemplo: 2. Levantamos el docker compose:

docker compose up -d
  1. Probamos que todo esté funcionando bien:
curl -vk https://example.com

Obvio que el whoami se puede borrar, yo lo dejo por motivos didácticos. No es necesario levantar un traefik por cada servicio que quieras servir, con un solo traefik basta y sobra. Supongamos que el whoami está en otro lado, quedaría así:

networks:
  traefik:
    external: true

services:
  whoami:
    image: traefik/whoami
    container_name: whoami
    labels:
      - traefik.enable=true
      - traefik.docker.network=traefik
      - traefik.http.routers.whoami.rule=Host(\"example.com\")
      - traefik.http.routers.whoami.entrypoints=websecure
      - traefik.http.routers.whoami.tls=true
      - traefik.http.routers.whoami.tls.certresolver=letsencrypt
    networks:
      - traefik