docker-swarm - 在 Docker Swarm 中运行 Traefik 时如何解决“使用空前端规则过滤容器”的问题
问题描述
在多台机器的 Docker Swarm 集群中运行时,Traefik 不会创建前端或后端。
OS version: 10.14.2 (18C54)
我按照本教程在我的 MacBook ( ) 上创建了 Docker Swarm : https ://docs.docker.com/get-started/part4/ 。我笔记本电脑上的 docker-machine 有版本0.14.0, build 89b8332
,而在虚拟机上运行的 docker 引擎有版本18.09.1, build 4c52b90
. 以下是创建的机器的摘要:
一旦机器启动并运行并创建了 swarm,我在我的 swarm 中部署了以下堆栈:
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:
下面的屏幕截图显示了正在运行的服务和 swarm 的集群可视化工具:
据我了解,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 集群中运行反向代理时,是否有另一种设置方法?
解决方案
使用 Swarm,标签部分必须在该deploy
部分中定义。
https://docs.traefik.io/configuration/backends/docker/#using-docker-with-swarm-mode
version: "3"
services:
whoami:
deploy:
labels:
traefik.docker.network: traefik
推荐阅读
- python - 使用 seaborn 将图例添加到带有渐变的条形图
- node.js - 防止在 Windows 10 桌面切换到锁定屏幕时停止 Node 应用程序
- python - 在 Tensorflow 2.0 的 tf.function input_signature 中使用字典
- python - Tensorflow SavedModel 和可变批量大小
- java - MongoDB Java 驱动程序 ~ 解码抽象类
- nativescript - Nativescript 医生抛出警告和错误
- microk8s - 带有 microk8s 的 kubefwd:127.0.0.1:8080:连接:连接被拒绝
- java - 何时使用 @OneToMany 和 @ManyToOne 以及 MapStruct - 我得到递归无穷大
- python - 如何重命名熊猫列表中的列名?
- pandas - 熊猫:将列中的所有日期时间转换为另一种格式