Traefik 将 Mailcatcher HTTP 转发到端口 1025 而不是 1080

问题描述 投票:0回答:1

我有一个本地 Docker 群,其中有一个 Traefik 服务路由到使用 compose 文件创建的其他堆栈。虽然堆栈是使用 compose 创建的,但 Traefik 作为独立服务运行:

docker service create --name traefik \
  -p 25:25 -p 80:80 -p 443:443 \
  --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \
  --network traefik \
  --constraint=node.role==manager \
  traefik:latest \
  --providers.docker=true \
  --entrypoints.smtp.address=:25 \
  --entrypoints.http.address=:80 \
  --entrypoints.https.address=:443 \
  --log.level=DEBUG

我只是想将 Mailcatcher 作为独立服务添加到群中。我不想使用撰写。

无论我尝试什么,Traefik 都坚持将 http 路由到 SMTP 端口(1025)而不是 HTTP 端口(1080)。来自 Traefik 日志:

msg="Creating load-balancer" entryPointName=http routerName=mailcatcher-1-a4m79pfmvp6ebj0ugv6qiiy7d@docker serviceName=mailcatcher-1-a4m79pfmvp6ebj0ugv6qiiy7d
msg="Creating server 0 http://10.0.0.75:1025" entryPointName=http routerName=mailcatcher-1-a4m79pfmvp6ebj0ugv6qiiy7d@docker serviceName=mailcatcher-1-ri25m46afg6kwmd5yw6yiek3y serverName=0
msg="child http://10.0.0.75:1025 now UP"

我最近尝试的方法是仅指定 http 端点,而不提及 smtp 或端口 1025:

docker service create --name mailcatcher --network traefik \
  --label "traefik.enable=true" \
  --label "traefik.http.routers.mailcatcher.rule=Host('mailcatcher.local')" \
  --label "traefik.http.routers.mailcatcher.entrypoints=http" \
  --label "traefik.http.services.mailcatcher.loadbalancer.server.port=1080" \
  --label "traefik.docker.network=traefik" \
  -p 1080 dockage/mailcatcher:0.9.0

Traefik 日志中的问题就摆在我面前:

msg="No entryPoint defined for this router, using the default one(s) instead: [http https smtp]" routerName=mailcatcher-1-ri25m46afg6kwmd5yw6yiek3y

我确信我错过了一些简单的事情。帮忙吗?

docker docker-compose docker-swarm
1个回答
0
投票

在 Traefik 服务上启用集群模式就可以了。

--providers.docker.swarmMode=true

更新了创建命令:

docker service create --name traefik \
  -p 25:25 -p 80:80 -p 443:443 \
  --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \
  --network traefik \
  --constraint=node.role==manager \
  traefik:latest \
  --providers.docker=true \
  --providers.docker.swarmMode=true \
  --entrypoints.smtp.address=:25 \
  --entrypoints.http.address=:80 \
  --entrypoints.https.address=:443 \
  --log.level=DEBUG

现在 Traefik 正在做正确的事情:

msg="Creating server 0 http://10.0.8.76:1080" routerName=mailcatcher@docker serviceName=mailcatcher entryPointName=http serverName=0

当然,我还必须更新我的撰写服务的标签,以便它们位于部署密钥下(请参阅swarmMode 文档):

services:
  app:
    deploy:
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.roth-mediator-app.rule=Host(`app.local`)"
        - "traefik.http.services.app.loadbalancer.server.port=3000"
        - "traefik.docker.network=traefik"
© www.soinside.com 2019 - 2024. All rights reserved.