Python 3.x 如何允许多个容器查看主机';s网络与Wireshark,并允许它们保持单独的寻址

Python 3.x 如何允许多个容器查看主机';s网络与Wireshark,并允许它们保持单独的寻址,python-3.x,docker-compose,wireshark,ubuntu-18.04,esxi,Python 3.x,Docker Compose,Wireshark,Ubuntu 18.04,Esxi,我希望有多个ubuntu18.04服务器vm运行在esxi6服务器上,运行多个容器,从docker compose开始,即: 允许通过HTTP(从Chromebook)访问远程桌面环境 可以在其主界面上运行Wireshark,以捕获整个网络上的流量 可以在同一个VM上、容器之间、使用谨慎的地址和两端用于连接的相同端口与TCP/IP进行通信(下面显示的相关工具功能使用python3.7) 可以使用TCP/IP与不同虚拟机上的不同容器进行通信,地址谨慎,两端使用相同的端口进行连接 网络由一个中央WA

我希望有多个
ubuntu18.04服务器
vm运行在
esxi6
服务器上,运行多个容器,从
docker compose
开始,即:

  • 允许通过
    HTTP
    (从Chromebook)访问远程桌面环境
  • 可以在其主界面上运行
    Wireshark
    ,以捕获整个网络上的流量
  • 可以在同一个VM上、容器之间、使用谨慎的地址和两端用于连接的相同端口与TCP/IP进行通信(下面显示的相关工具功能使用
    python3.7
  • 可以使用TCP/IP与不同虚拟机上的不同容器进行通信,地址谨慎,两端使用相同的端口进行连接
  • 网络由一个中央WAP建立,该WAP通过WAN连接互联网,并通过硬链接连接到服务器塔(运行
    ESXi
    )。
    ESXi
    服务器有两个端口组,一个连接到可以访问WAP的NIC(
    VM网络
    ),另一个连接到失效的NIC(
    Exercise Network
    )。所有虚拟机在初始化后都连接到
    练习网络
    练习网络有一个中央DHCP服务器,但没有网关

    通过使用
    dorowu/ubuntu桌面lxde vnc:bionic lxqt
    容器并使用
    network\u模式:host
    运行
    docker compose
    以允许
    Wireshark
    查看所有流量,我已经解决了问题1和问题2,但是使用主机网络使得无法寻址特定的容器

    我试图通过更改桌面服务器的端口来允许多个容器成功共享相同的地址空间,但它不允许通信,并且每个容器都不能直接“寻址”

    实现我编写的用于主机间通信的
    python3.7
    工具的客户机/服务器部分的python函数:

    version: '3'
    
    services:
      dt1:
        image: uwardlaw/omf:dt-1
        volumes:
          - ./shared:/home/sandbox/shared
        environment:
          - HTTP_PASSWORD=httptest1
          - USER=test1
          - PASSWORD=test1pass
        network_mode: host
        privileged: true
    
    def startListener():
    loop=asyncio.new\u event\u loop()
    asyncio.set\u event\u循环(循环)
    server=websockets.serve(侦听器,“127.0.0.1”,9999)
    循环。运行\u直到\u完成(服务器)
    loop.run_forever()
    异步def侦听器(websocket,路径):
    msg=wait websocket.recv()
    打印('SSC>>>收到:'+msg)
    回复=输入('SSC>>>回复:')
    如果reply为None或reply=''或reply.isspace():
    等待websocket.send(“”)
    其他:
    等待websocket.send(回复)
    异步def发送消息(主机):
    uri=“ws://”+str(主机)+“:9999”
    与websocket异步。作为websocket连接(uri):
    msg=input('SSC>>>消息('+str(主机)+'):')
    等待websocket.send(用户+'/'+msg)
    reply=wait websocket.recv()
    打印('SSC>>>回复('+str(主机)+'):'+Reply)
    返回
    
    Dockerfile: (我删除了上述工具的安装,这对这个问题不重要)

    (sed命令用于更改连接到桌面的端口,允许多个连接到同一虚拟机上的不同容器。当docker compose运行时,我只需更改sed命令,将端口80替换为端口x——显示dockerfile允许在端口90上通过HTTP连接到虚拟机)

    docker compose.yml:

    version: '3'
    
    services:
      dt1:
        image: uwardlaw/omf:dt-1
        volumes:
          - ./shared:/home/sandbox/shared
        environment:
          - HTTP_PASSWORD=httptest1
          - USER=test1
          - PASSWORD=test1pass
        network_mode: host
        privileged: true
    
    (docker compose缩减,每个虚拟机大约有7-8个“dts”,但它们看起来都一样——当前的示例运行一个。此外,为了速度,一个单独的函数构建映像并将其推送到dockerhub,这就是为什么拉取的映像会有不同的标记)