【问题标题】:Traefik not seeing Docker Swarm servicesTraefik 没有看到 Docker Swarm 服务
【发布时间】:2020-01-18 21:46:20
【问题描述】:

我目前正在学习如何使用 Traefik 和 Docker Swarm,为此我一直在尝试设置 Traefik 可以路由到的简单 whoami 服务。但是,无论我尝试什么,我都无法让 Traefik 看到任何 Docker Swarm 服务。这是我的撰写文件:

version: "3.7"

services:
        traefik:
                image: "traefik:v2.0.0"
                command:
                        - --entrypoints.web.address=:80 # Enables listening to HTTP requests
                        #- --providers.docker=true # Enables Docker support
                        - --providers.docker.swarmMode=true # Enables Docker Swarm Mode support
                        - --providers.docker.endpoint=tcp://127.0.0.1:2375 # ???
                        - --api.insecure # Activates the web ui in insecure mode
                ports:
                        - "80:80" # Binds port 80 (HTTP)
                        - "8080:8080" # Binds port 8080 (Web UI)
                volumes:
                        - "/var/run/docker.sock:/var/run/docker.sock:ro" # Enables listening to Docker state
                deploy:
                        labels:
                                - traefik.http.services.traefik.loadbalancer.server.port=8080
                        placement:
                                constraints: [node.role==manager]

        whoami:
                image: "containous/whoami:v1.3.0"
                deploy:
                        labels:
                                - traefik.port=80
                                - traefik.http.routers.whoami.rule=Host(`testificate.com`)
                                - traefik.http.services.whoami.loadbalancer.server.port=8080

【问题讨论】:

    标签: docker docker-compose docker-swarm traefik


    【解决方案1】:

    您的 docker-compose.yml 文件有问题。如:

    #- --providers.docker=true 
    

    你应该打开它。

    - --providers.docker.endpoint=tcp://127.0.0.1:2375
    - "/var/run/docker.sock:/var/run/docker.sock:ro"
    

    你告诉 traefik 使用 tcp://127.0.0.1:2375,但你设置了 /var/run/docker.sock。

    whoami 和 traefik 标签没有入口点,如下所示:

    traefik:

    - traefik.http.routers.traefik-http.entrypoints=web
    

    谁阿米:

    - traefik.http.routers.whoami.entrypoints=web
    

    你应该为 traefik 设置网络标签。如下:

    TRAEFIK_PROVIDERS_DOCKER_NETWORK=XXX
    

    【讨论】: