首页 > 解决方案 > 在 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代替。

问题

提前感谢任何反馈或提示。我使用网络研究了服务发现(consul、etcd)overlay,这对我的场景来说感觉有点太多(不使用大多数这些功能)。

标签: dockerdocker-composetcpdumpdocker-networking

解决方案


推荐阅读