Traefik 将一个应用程序路由到端口 80,其他应用程序需要显式端口
Traefik routing one application to port 80, others require explicit port
我有一个环境 运行 docker 容器。
此环境托管 Traefik、Nextcloud、MotionEye 和 Heimdall。
我在 docker 容器中还有另一个环境 运行 CoreDNS。
出于某种原因,我可以从 motioneye.docker.swarm 访问 MotionEye(为了隐私更改了此处的域)。
但是,对于 nextcloud 和 Heimdall,我必须明确访问这些端口,而且我很难说出原因。
例如Heimdall 是 gateway.docker.swarm:8091 而应该是 gateway.docker.swarm
当用户向本地 dns 服务器 X.X.X.117 请求网页时,它会被路由到 X.X.X.106.
上的 traefik 实例
我的traefik compose文件如下:
version: '3'
services:
reverse-proxy:
# The official v2 Traefik docker image
image: traefik:v2.3
restart: always
# Enables the web UI and tells Traefik to listen to docker
command: --api.insecure=true --providers.docker
ports:
# The HTTP port
- "80:80"
# The Web UI (enabled by --api.insecure=true)
- "8080:8080"
volumes:
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock
labels:
- "traefik.port=8080"
- "traefik.backend=traefik"
- "traefik.frontend.rule=Host:traefik.docker.swarm"
- "traefik.docker.network=traefik_default"
我的海姆达尔作文如下:
version: "3"
services:
heimdall:
image: ghcr.io/linuxserver/heimdall
container_name: heimdall
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- /home/pi/heimdall/config:/config
ports:
- 8091:80
restart: unless-stopped
networks:
- heimdall
labels:
- "traefik.enable=true"
- "traefik.port=8091"
- "traefik.http.routers.heimdall.entrypoints=http"
- "traefik.http.routers.heimdall.rule=Host(`gateway.docker.swarm`)"
networks:
heimdall:
external:
name: heimdall
谁能看出我做错了什么?
当您通过 gateway.docker.swarm:8091
访问时,它会起作用,因为您正在直接访问 heimdall 容器。这是可能的,因为你定义了
ports:
- 8091:80
在你的 docker-compose.
为了通过 traefik 访问,它们必须在同一网络上。此外,如果您希望此容器只能通过 traefik 访问,请删除端口映射。最后相应地更正 traefik 端口。
version: "3"
services:
heimdall:
image: ghcr.io/linuxserver/heimdall
container_name: heimdall
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- /home/pi/heimdall/config:/config
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.port=80"
- "traefik.http.routers.heimdall.entrypoints=http"
- "traefik.http.routers.heimdall.rule=Host(`gateway.docker.swarm`)"
我有一个环境 运行 docker 容器。 此环境托管 Traefik、Nextcloud、MotionEye 和 Heimdall。 我在 docker 容器中还有另一个环境 运行 CoreDNS。 出于某种原因,我可以从 motioneye.docker.swarm 访问 MotionEye(为了隐私更改了此处的域)。 但是,对于 nextcloud 和 Heimdall,我必须明确访问这些端口,而且我很难说出原因。 例如Heimdall 是 gateway.docker.swarm:8091 而应该是 gateway.docker.swarm
当用户向本地 dns 服务器 X.X.X.117 请求网页时,它会被路由到 X.X.X.106.
上的 traefik 实例我的traefik compose文件如下:
version: '3'
services:
reverse-proxy:
# The official v2 Traefik docker image
image: traefik:v2.3
restart: always
# Enables the web UI and tells Traefik to listen to docker
command: --api.insecure=true --providers.docker
ports:
# The HTTP port
- "80:80"
# The Web UI (enabled by --api.insecure=true)
- "8080:8080"
volumes:
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock
labels:
- "traefik.port=8080"
- "traefik.backend=traefik"
- "traefik.frontend.rule=Host:traefik.docker.swarm"
- "traefik.docker.network=traefik_default"
我的海姆达尔作文如下:
version: "3"
services:
heimdall:
image: ghcr.io/linuxserver/heimdall
container_name: heimdall
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- /home/pi/heimdall/config:/config
ports:
- 8091:80
restart: unless-stopped
networks:
- heimdall
labels:
- "traefik.enable=true"
- "traefik.port=8091"
- "traefik.http.routers.heimdall.entrypoints=http"
- "traefik.http.routers.heimdall.rule=Host(`gateway.docker.swarm`)"
networks:
heimdall:
external:
name: heimdall
谁能看出我做错了什么?
当您通过 gateway.docker.swarm:8091
访问时,它会起作用,因为您正在直接访问 heimdall 容器。这是可能的,因为你定义了
ports:
- 8091:80
在你的 docker-compose.
为了通过 traefik 访问,它们必须在同一网络上。此外,如果您希望此容器只能通过 traefik 访问,请删除端口映射。最后相应地更正 traefik 端口。
version: "3"
services:
heimdall:
image: ghcr.io/linuxserver/heimdall
container_name: heimdall
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- /home/pi/heimdall/config:/config
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.port=80"
- "traefik.http.routers.heimdall.entrypoints=http"
- "traefik.http.routers.heimdall.rule=Host(`gateway.docker.swarm`)"