I want to use Traefik v2.5 as a local reverse proxy to access all docker containers of my local daemon using a domain of pattern http://container_name.localhost
in my browser.
This is my docker-compose.yml
file:
version: "3.7"
services:
traefik:
image: traefik:v2.5
restart: always
network_mode: "host"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=true"
- "--providers.docker.defaultrule=Host(`{{ .Name }}.localhost `)"
- "--entrypoints.web.address=:80"
Then I started the container and a simple web server to see if it worked:
docker-compose up -d
docker run -d --name my_nginx nginx
Then, I was able to access the web server at http://my-nginx.docker.localhost/. However, the name of the docker container uses underscores and not hyphens. This makes it very confusing if you just want to access one of your containers in the browser. Therefore, I want to access the container using http://my_nginx.localhost/. Is there a way to disable the normalization of the traefik rule?
I am aware that one normally uses hyphens in URLs, but docker just wants to have it's underscores, and this is just my local dev environment. I also do not want to add a traefik label manually, e.g.
traefik.http.routers.my_nginx.rule==Host(`my_nginx.localhost`)
whenever I start a simple dev container.
I just checked the docs, and it's written that you have sprig functions available in the go template snippets.
Therefore, you can leverage go template + sprigs string functions to replace the hyphen with underscores.
Host(`{{ .Name | replace "-" "_" }}.localhost `)