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"; } }