I need help understanding the concept of traefik reverse proxy when using docker.
Assuming I got a webserver (let’s call it service-1) which is usually running on Port 8081.
Without any proxy I would access it this way:
According to the traefik docs, the following configuration should me to a access this service by using the a URL in form of
service-1: image: "service1" container_name: "simple-service-1" labels: - "traefik.enable=true" - "traefik.http.routers.service1.rule=Host(`localhost`) && Path(`my-service`)" - "traefik.http.routers.service1.entrypoints=web" - "traefik.http.services.service1.loadbalancer.server.port=8081"
Now, what I don’t understand is, how traefik handles responses from the server.
E. g. my server tries to load an e. g. image (or similar). Without the proxy this is done by performing a GET-Request:
Now, when using traefik the webserver is not aware of that, thus performing a GET request of
/img/image.jpg – which is wrong and not accessible.
If I rewrite the URL using redirectregex, the image is still no accessible:
http://localhost/my-service/img/image.jpg (returns a Not found)
And I do not understand why.
I always thought of the concept that an URL in form of
http://localhost/my-service/<path> is directly redirected (or stripped) by traefik to
http://<docker-internal-ip>:8080/<path> – but apparently this is not the case. What did I miss?
Source: Docker Questions