在具有多台机器的Docker Swarm集群中运行时,Traefik既不会创建前端,也不会创建后端。
我按照以下教程https://docs.docker.com/get-started/part4/在MacBook(OS version: 10.14.2 (18C54)
)上创建了一个Docker Swarm。我的笔记本电脑上的docker-machine版本为0.14.0, build 89b8332
,VM上运行的docker引擎版本为18.09.1, build 4c52b90
。以下是创建的计算机的摘要:
一旦机器启动并运行并创建了集群,我就在集群中部署了以下堆栈:
version: '3.4'
services:
api_gateway:
image: traefik
command: --api \
--docker \
--docker.swarmmode \
--docker.watch \
--logLevel=DEBUG
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- external
- internal
deploy:
placement:
constraints: [node.role==manager]
redis:
image: redis:latest
command: ["redis-server", "--appendonly", "yes"]
volumes:
- redis:/data
networks:
- internal
deploy:
placement:
constraints: [node.role==worker]
nginx-test:
image: valian/nginx-test-page
labels:
- "traefik.frontend.rule=Host:api.local.mydomain.com"
depends_on:
- redis
networks:
- external
- internal
deploy:
placement:
constraints: [node.role==worker]
networks:
external:
driver: overlay
external: true
internal:
driver: overlay
volumes:
redis:
下面的屏幕快照显示了正在运行的服务以及该群的集群可视化器:
据我了解, Traefik 应该已经发现了服务 nginx-test ,然后为其创建了前端和后端。这是Traefik仪表板的截图:
api_gateway 服务(Traefik)似乎无法识别为 nginx-test 服务定义的前端规则,您可以在以下日志中找到:
2019-02-06T09:04:37.139463121Z time="2019-02-06T09:04:37Z" level=debug msg="Filtering container with empty frontend rule webserver_nginx-test.1 "
我在Traefik设置上缺少什么吗?在Docker Swarm集群中运行反向代理时,还有另一种设置方法吗?
答案 0 :(得分:3)
使用Swarm,标签部分必须在deploy
部分中定义。
https://docs.traefik.io/configuration/backends/docker/#using-docker-with-swarm-mode
version: "3"
services:
whoami:
deploy:
labels:
traefik.docker.network: traefik