Traefik将一个应用程序路由到端口80,其他应用程序则需要显式端口



我有一个运行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组合文件如下:

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"

我的Heimdall组成如下:

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访问时,它是有效的,因为您直接访问海姆达尔容器。这是可能的,因为您定义了

ports:
- 8091:80

在你的码头上。

为了通过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`)"

相关内容

最新更新