我在使用traefik的docker swarm中运行着多个堆栈,其中每个堆栈中的服务都连接到覆盖网络(traefik-net),以便traefik可以与它们通信。
如果我在每个堆栈中都有一个称为相同服务名称(service1)的服务,然后在每个堆栈中都有另一个服务(service2),请尝试通过服务名称(ping http://service1)来访问它有时会在另一个堆栈中命中service1,有时会在同一堆栈中命中service1。
docker network create --driver overlay traefik-net
stack1:
services:
service1:
networks:
- default
- traefik-net
service2:
networks:
- default
- traefik-net
networks:
traefik-net:
external: true
stack2:
services:
service1:
networks:
- default
- traefik-net
networks:
traefik-net:
external: true
我希望service2仅命中同一堆栈中的service1。
我假设服务可以通过在堆栈名称前加上服务名称(ping http // stack2_service1)来仅击中另一个堆栈中的服务。但是我了解到,由于有了traefik-net覆盖网络,他们显然可以在没有堆栈名称前缀的情况下相互调用。
有没有办法关闭没有堆栈名称前缀的跨堆栈的服务通信?
或者可能有针对该问题的traefik解决方案?
如果有人遇到了这个问题,我将不胜感激。
答案 0 :(得分:0)
我发现了一个类似的问题:Docker DNS with Multiple Projects Using the Same Network
除了总是按stack_service
而不是service
之外,似乎没有其他解决方法。
答案 1 :(得分:0)