不要规范化 traefik 规则中的 docker 容器名称
Do not normalize docker container names in traefik rules
我想使用 Traefik v2.5 作为本地反向代理来访问我本地守护进程的所有 docker 容器,在我的浏览器中使用模式 http://container_name.localhost
的域。
这是我的 docker-compose.yml
文件:
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"
然后我启动了容器和一个简单的网络服务器,看看它是否工作:
docker-compose up -d
docker run -d --name my_nginx nginx
然后,我就可以访问位于 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/ 的网络服务器了。有没有办法禁用 traefik 规则的规范化?
我知道人们通常在 URL 中使用连字符,但 docker 只想使用下划线,这只是我的本地开发环境。我也不想手动添加 traefik 标签,例如
traefik.http.routers.my_nginx.rule==Host(`my_nginx.localhost`)
每当我启动一个简单的开发容器时。
我刚刚检查了 docs,上面写着在 go 模板片段中有可用的 sprig 函数。
因此,您可以利用 go template + sprigs string functions 将连字符替换为下划线。
Host(`{{ .Name | replace "-" "_" }}.localhost `)
我想使用 Traefik v2.5 作为本地反向代理来访问我本地守护进程的所有 docker 容器,在我的浏览器中使用模式 http://container_name.localhost
的域。
这是我的 docker-compose.yml
文件:
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"
然后我启动了容器和一个简单的网络服务器,看看它是否工作:
docker-compose up -d
docker run -d --name my_nginx nginx
然后,我就可以访问位于 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/ 的网络服务器了。有没有办法禁用 traefik 规则的规范化?
我知道人们通常在 URL 中使用连字符,但 docker 只想使用下划线,这只是我的本地开发环境。我也不想手动添加 traefik 标签,例如
traefik.http.routers.my_nginx.rule==Host(`my_nginx.localhost`)
每当我启动一个简单的开发容器时。
我刚刚检查了 docs,上面写着在 go 模板片段中有可用的 sprig 函数。
因此,您可以利用 go template + sprigs string functions 将连字符替换为下划线。
Host(`{{ .Name | replace "-" "_" }}.localhost `)