首页 > 解决方案 > Traefik 在 Docker Swarm 中运行的基本配置

问题描述

据我所知,它是这样的:

docker-traefik.yml

version: '3'

services:
  traefik:
    image: traefik
    command: --docker   # enable Docker Provider
      # use Docker Swarm Mode as data provider
      --docker.swarmmode
    ports:
      - "80:80"
    volumes:
      # for it to be able to listen to Docker events
      - /var/run/docker.sock:/var/run/docker.sock

docker-whoami.yml

version: '3'

networks:
  traefik_default:
    external: true

services:
  whoami:
    image: containous/whoami
    networks:
      # add to traefik network
      - traefik_default
    deploy:
      labels:
        # whoami is on port 80
        - "traefik.port=80"
        # whoami is on traefik_default network
        - "traefik.docker.network=traefik_default"
        # when to forward requests to whoami
        - "traefik.frontend.rule=Host:example.com"

让我在这里引用文档

所需标签:

  • traefik.frontend.rule
  • traefik.port- 如果没有这个,调试日志将显示该服务被故意过滤掉。
  • traefik.docker.network- 如果没有这个,可能会出现 504。

...

traefik.docker.network 覆盖用于连接到容器的默认 docker 网络。[1]

traefik.port=80注册此端口。当容器暴露多个端口时很有用。

但是为什么不能将暴露的端口设置为默认值traefik.port呢?从我所看到的情况来看,它可以在没有的情况下工作traefik.docker.network(也就是说,如果traefik_default是第一个服务的网络)。我什么时候可以得到 504?

标签: dockerdocker-swarmtraefikswarmdocker-swarm-mode

解决方案


但是为什么不能将暴露的端口作为默认值 traefik.port 呢?

如果你的容器有 3 或 4 个暴露端口,traefik 应该使用哪个?那么谁对 traefik 说,这些端口中哪一个是正确的呢?所以你做 - 与traefik.port。使用您配置的服务的默认端口的问题在哪里?

你应该公开 80、443 和 8080 - 所以 http/https 网页的 80 和 443 以及 traefik 仪表板的 8080。如果你不想使用仪表板,你不需要暴露 8080。

而且我在您的作曲家文件中没有看到任何网络配置@traefik - 这应该没有网络吗?你的服务和traefik需要在同一个网络中。否则 traefik 无法到达您的服务并转发。

端点在哪里?


推荐阅读