Docker Ubuntu:无法从以太网摄像机进行流式传输

Docker Ubuntu:无法从以太网摄像机进行流式传输

背景: 大家好。我正尝试通过将复杂系统放入 Docker 容器中来解决问题。托管这些容器的平台在 NIC 卡上有 6 个以上的以太网端口,可用于多种用途(连接到两个端口的摄像头、连接到另一个端口的系统 LAN 等)。

在系统 LAN 上,我需要为每个 Docker 容器分配 LAN 子网上的 IP 地址。摄像机的 IP 地址位于不同的子网上,并直接保留在摄像机本身上。

我做了什么: 为了给系统 LAN 上的容器分配静态 IP 地址,我使用 MACVLAN 驱动程序实现了该网络,并对主机上的路由表进行了调整。这按预期工作,提供了对系统 LAN 上其他平台的访问。

为了能够从容器访问摄像头,我使用 IPVLAN 驱动程序实现了该网络。此解决方案提供对摄像头的有限访问。稍后会详细介绍。我开始尝试使用 MACVLAN 驱动程序访问摄像头,但无法访问容器内的摄像头 IP 地址。

只是为了好玩,我把 network_mode 设为容器上的主机,并注释掉所有其他网络实现。容器内的一切似乎都运行良好。当然,这不适合我的情况,因为我仍然需要为容器分配一个静态 IP 地址(系统架构约束)。

我怀疑我的 Docker 网络配置、主机路由表、防火墙或所有方面都不太正确。

Docker 镜像: 一个几乎基本的 Ubuntu:20.04 图像,安装了inetutils-ping、、iproute2和。iputiles-pingnet-tools

docker-compose文件:

Version: '3.1'

services:
  my_container:
    container_name: pc1-a
    hostname:       pc1-a
    image:          my-image
    privileged:     true
    stdin_open:     true
    tty:            true
    command:        /bin/bash
#    network_mode:   host
    networks:
      system_net:
        ipv4_address: 192.168.127.102
      cam1_net:

    ports:
      - "8022:22"

networks:
  system_net:
    driver: macvlan
    driver_opts:
      parent: eth6
    ipam:
      config:
        - subnet:  192.168.127.0/24
          gateway: 192.168.127.1
          ip_range: 192.168.127.96/28
          aux_addresses:
            host: 192.168.127.101

  cam1_net:
    driver: ipvlan
    driver_opts:
      parent: eth1
    ipam:
      config:
        - subnet:   192.168.11.0/24
          gateway:  192.168.11.1
          ip_range: 192.168.11.0/28
          aux_addresses:
            dev:  192.168.11.11
            host: 192.168.11.10

(如果我取消注释network_mode上面的行,则需要注释networks下面的信息。)

使用上述配置,ifconfig在主机上产生:

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9000
        inet 192.168.11.10  netmask 255.255.255.0  broadcast 192.168.11.255
                inet6 fe80::fa02:78ff:fe22:16d0  prefixlen 64  scopeid 0x20<link>
                        ether f8:02:78:22:16:d0  txqueuelen 1000  (Ethernet)
                                RX packets 194707  bytes 1735032084 (1.7 GB)
                                        RX errors 0  dropped 0  overruns 0  frame 0
                                                ...

在容器内,ifconfig产生:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9000
        inet 192.168.11.2  netmask 255.255.255.0  broadcast 192.168.11.255
                inet6 fe80::f802:7800:122:16d0  prefixlen 64  scopeid 0x20<link>
                        ether f8:02:78:22:16:d0  txqueuelen 0  (Ethernet)
                                RX packets 0  bytes 0 (0.0 B)
                                        RX errors 0  dropped 0  overruns 0  frame 0
                                                ...

请注意,Dockereth1在主机上重命名为eth0容器内。还请注意,容器内没有接收到任何数据包。

虽然在这里展示起来太麻烦了,但我确实在容器中安装了 Pleora 相机 SDK,并运行了一些示例实用程序。当网络模式为主机时,这些实用程序运行良好,但使用上述网络配置时会超时。

相关内容