traefik docker compose, access to a host service



  • Hallo, vielleicht habt ihr eine Idee.

    https://doc.traefik.io/traefik/routing/services/#configuration-examples

    Ich möchte für traefik einen eigenen Service definieren, der auf dem Host läuft (also nicht im docker container)... http://0.0.0.0:8383

    Theoretische sollte das mit dem label

    - "traefik.http.services.monitorix.loadBalancer.server.url=http://host.docker.internal:8383/"

    möglich sein, aber wenn ich die URL lokal aufrufe, erhalte ich "404 page not found" und wenn ich sie entfernt aufrufe, erhalte ich "Bad Gateway" als Antwort.

    Wenn ich
    - "traefik.http.services.monitorix.loadBalancer.servers.url=http://host.docker.internal:8383/"
    schreibe, so ist laut logs die label syntax ungültig.

    Hier sind mal die vollständigen Label-Definitionen:

          #...
          - "traefik.http.services.monitorix.loadBalancer.server.url=http://host.docker.internal:8383/"
          - "traefik.http.routers.monitorix.rule=Host(`monitorix.domain.tld`)"
          - "traefik.http.routers.monitorix.service=monitorix"
          - "traefik.http.routers.monitorix.entrypoints=websecure"
          - "traefik.http.routers.monitorix.tls.certresolver=myresolver"
          - "traefik.http.routers.monitorix.middlewares=monitorixchain"
          - "traefik.http.middlewares.monitorixredi.redirectregex.regex=^https?://monitorix\\.domain\\.tld/$"
          - "traefik.http.middlewares.monitorixredi.redirectregex.replacement=https://monitorix.domain.tld/monitorix"
          - "traefik.http.middlewares.monitorixchain.chain.middlewares=myratelimit,myauth,monitorixredi"
    

    Auf http://0.0.0.0:8383/monitorix läuft als Dienst monitorix mit, ich glaube, apache als httpd auf Port 8383. Hier der Teil aus der monitorix config:

    <httpd_builtin>
            enabled = y
            host =
            port = 8383
            user = nobody
            group = nobody
            log_file = /var/log/monitorix-httpd
            hosts_deny =
            hosts_allow =
            autocheck_responsiveness = y
            <auth>
                    enabled = n
                    hosts_deny = all
                    msg = Monitorix: Restricted access
                    htpasswd = /var/lib/monitorix/htpasswd
            </auth>
    </httpd_builtin>
    

    Habt ihr vielleicht eine Idee, warum das nicht geht, bzw. warum docker/traefik nicht auf das host network zugreifen kann? Vielen Dank vorab.



  • Bin einen Schritt weiter. 🙂

        labels:
          - "traefik.enable=true"
          #...
          - "traefik.http.services.monitorix.loadbalancer.server.url=http://host.docker.internal/"
          - "traefik.http.services.monitorix.loadbalancer.server.scheme=http"
          - "traefik.http.services.monitorix.loadbalancer.server.port=8383"
          - "traefik.http.services.monitorix.loadbalancer.passhostheader=false"
          - "traefik.http.routers.monitorix.rule=Host(`monitorix.domain.tld`)"
          - "traefik.http.routers.monitorix.service=monitorix"
          - "traefik.http.routers.monitorix.entrypoints=websecure"
          - "traefik.http.routers.monitorix.tls.certresolver=myresolver"
          - "traefik.http.routers.monitorix.middlewares=monitorixchain"
          #- "traefik.http.middlewares.monitorixredi.redirectregex.regex=^https?://monitorix\\.domain\\.tld/$"
          #- "traefik.http.middlewares.monitorixredi.redirectregex.replacement=https://monitorix.domain.tld/monitorix"
          - "traefik.http.middlewares.monitorixchain.chain.middlewares=myratelimit,myauth"
        network_mode: "host"
        extra_hosts:
          - "host.docker.internal:host-gateway"
    

    https://i.postimg.cc/kg3NYTHz/grafik.png

    Aber auch gleich das nächste Problem ... er lädt die Bilder nicht:

    https://i.postimg.cc/bwk74Fwt/grafik.png

    Woran mag das liegen?



  • Habs gelöst. 🙂 Die Images müssen ein https prefix bekommen und das hatten sie bislang net ...

    Für alle Interessierten, in der monitorix.conf unter <httpd_builtin> gibt es die Option:

    https_url = y

    mit genau der dies geschieht ... traefik selber kann das bei mir net, weil ich Port 80 nicht geöffnet hatte.

    Herausgefunden hatte ich das durch einen Blick in den Source:

    $config{url} = ($config{url_prefix_proxy} || "");
    if(!$config{url}) {
            $config{url} = ($ENV{HTTPS} || ($config{httpd_builtin}->{https_url} || "n") eq "y") ? "https://" . $ENV{HTTP_HOST} : "http://" . $ENV{HTTP_HOST};
            $config{hostname} = $config{hostname} || $ENV{SERVER_NAME};
            if(!($config{hostname})) {      # called from the command line
                    $config{hostname} = "127.0.0.1";
                    $config{url} = "http://127.0.0.1";
            }
    }
    

Anmelden zum Antworten