Search code examples
dockerdocker-composetraefik

No response from traefik once HTTPS is enabled


I'm trying to setup traefik as the reverse proxy for my docker containers, but I am stuck setting containers up to use HTTPS.

I copied the docker-compose from the traefik user guide and modified it slightly (see below).

My containers work fine, and if I comment out the two last labels from the whoami service, I can access the service via test.example.com:80. However, if I add the two labels, I no longer get any response from my HTTP request to https://test.example.com(:443).

I can retrieve the certificate fine, and it is stored in acme.json as expected.

I've enabled debug logging, but nothing of significance is logged. How do I go about debugging this?

version: "3.3"

services:
  traefik:
    container_name: "traefik"
    image: "traefik:v2.1"
    command:
      - "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
      #- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.myresolver.acme.email=me@example.com"
      - "--certificatesresolvers.myresolver.acme.storage=/acme.json"
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "/opt/docker_volumes/traefik/acme.json:/acme.json"
    networks:
      - web

  whoami:
    image: "containous/whoami"
    container_name: "simple-service"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`test.example.com`)"
      - "traefik.http.routers.whoami.entrypoints=websecure"
      - "traefik.http.routers.whoami.tls.certresolver=myresolver"
    networks:
      - web

networks:
  web:
    external: true

The network web was created by executing the following:

docker network create --driver=bridge --subnet=10.0.0.0/24 --gateway=10.0.0.1 web

Solution

  • it's an issue with your network configuration because the following example works fine:

    version: "3.3"
    
    services:
      traefik:
        container_name: "traefik"
        image: "traefik:v2.1"
        command:
          - "--log.level=INFO"
          - "--api.insecure=true"
          - "--providers.docker"
          - "--providers.docker.exposedbydefault=false"
          - "--entrypoints.web.address=:80"
          - "--entrypoints.websecure.address=:443"
          - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
          - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
          - "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
          - "--certificatesresolvers.myresolver.acme.email=me@example.com"
          - "--certificatesresolvers.myresolver.acme.storage=/acme.json"
        ports:
          - "80:80"
          - "443:443"
          - "8080:8080"
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock:ro"
          - "/opt/docker_volumes/traefik/acme.json:/acme.json"
    
      whoami:
        image: "containous/whoami"
        container_name: "simple-service"
        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.whoami.rule=Host(`test.example.com`)"
          - "traefik.http.routers.whoami.entrypoints=websecure"
          - "traefik.http.routers.whoami.tls.certresolver=myresolver"