docker - 在 Docker 中组合了 `host` 和 `link` 网络
问题描述
该场景是构建一个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
服务是 pingfirst
服务。watcher
能够通过使用来监控它network_mode: host
。由于 egping first
在内部是不可能的watcher
,因此 IP 地址已被硬编码,因此watcher
使用 egping 172.25.0.11
代替。
问题
- 有没有更好的方法来“物理”访问所有发送到动态组合网桥的包
br-*
(tcpdump
目前通过使用host
网络实现)? - 有没有一种方法可以结合网络
host
和bridge
网络的功能,例如也可以使用自定义插件的不同驱动程序?我查看了驱动程序macvlan
和ipvlan
(L2,Docker 上的实验功能),但无法监控所有组合服务的流量。
提前感谢任何反馈或提示。我使用网络研究了服务发现(consul、etcd)overlay
,这对我的场景来说感觉有点太多(不使用大多数这些功能)。
解决方案
推荐阅读
- python-3.x - 如何爬取基于 algolia-AJAX 的网站?
- java - 如何使用java将相机拍摄的图像添加到Android中的imageviewer?我试过下面的代码
- python - 如何创建一个计数器列来计算(外部)组中的(内部)组,在python中的每个(外部)组之后重置
- node.js - 使用 Google Cloud Functions Node JS 10 仅从特定存储桶目录复制事件驱动的文件
- swiftui - 在某些视图上隐藏底部标签栏
- mariadb - MariaDB 列存储删除不删除
- python - 如何使用嵌套对象和文件从 Reactjs 前端向 django rest 框架 API 发送发布请求
- regex - 将两个字符串中的文本放入基于找到的文本命名的单独新文件中
- python-3.x - 如何将父目录中的模块导入子目录模块
- php - 保存的图像有时是全黑的