该方案是建立一个watcher
容器,该容器能够侦听给定docker-compose
服务组合上的任何网络流量。除此之外,watcher
必须直接将数据包发送到专用服务。
我发现host
上的watcher
网络基本上是我想要的(包括可能对Docker引擎管理的所有网络设备包含过多信息的暗示)。为了将通信直接定位到任何服务,似乎需要使用link
设置-与host
的网络相矛盾。
docker-compose.yaml
(完整的配置可在https://github.com/ohader/docker-watcher-demo上找到)
version: "3.7"
services:
watcher:
build:
context: ./custom
network_mode: host
entrypoint: "tcpdump -i any"
first:
build:
context: ./custom
networks:
default:
ipv4_address: 172.25.0.11
entrypoint: "sleep infinity"
second:
build:
context: ./custom
networks:
default:
ipv4_address: 172.25.0.22
entrypoint: "ping first"
networks:
default:
ipam:
driver: default
config:
- subnet: "172.25.0.0/16"
基本上,second
服务正在对first
服务执行ping操作。 watcher
可以使用network_mode: host
进行监视。
由于ping first
在watcher
内部是不可能的,因为IP地址已经过硬编码,因此watcher
正在使用例如改为ping 172.25.0.11
。
br-*
(当前通过使用tcpdump
网络发送到动态组成的网桥host
的所有程序包具有“物理”访问权?)< / li>
host
和bridge
网络的功能结合起来,例如还通过使用不同的驱动程序甚至自定义插件?我研究了驱动程序macvlan
和ipvlan
(L2,
Docker),但无法监视所有组合服务之间的流量。在此先感谢您的任何反馈或提示。我使用overlay
网络研究了服务发现(领事等),这对于我的情况(不使用其中的大多数功能)感觉有点过多。