【问题标题】:Sharing virtual network with docker container与 docker 容器共享虚拟网络
【发布时间】:2020-11-11 02:41:00
【问题描述】:

我正在做一个需要我在主机上创建虚拟 CAN 网络的项目

$ sudo modprobe vcan
$ sudo ip link add dev vcan0 type vcan
$ sudo ip link set up vcan0

我的 ifconfig :

我的问题是如何与我的 docker 容器共享这个接口。

如果它有任何用处,我在我的主机上运行了以下命令find / -name "vcan0" -print 2>/dev/null

/sys/class/net/vcan0
/sys/devices/virtual/net/vcan0
/proc/sys/net/ipv4/conf/vcan0
/proc/sys/net/ipv4/neigh/vcan0

我可以使用docker run --rm -it --network=host ... 运行 Docker 容器。唯一的问题是不再有网络隔离 b/w docker 主机和容器。有没有办法实现上述但不共享主机网络?

【问题讨论】:

    标签: linux docker can-bus docker-networking python-can


    【解决方案1】:

    我还没有找到在没有--network=host 的情况下与 Docker 容器共享 CAN 网络接口的方法,但有一种可能的解决方法。您可以使用 CAN-UDP 桥接器,例如 cannelonican2udp,通过 UDP 发送 CAN 帧。

    我过去曾使用它来将远程设备上的物理 CAN 总线连接到笔记本电脑上的虚拟 CAN 接口。但它应该同样适用于 Docker 容器。

    一个缺点是您必须在容器中创建一个vcan 接口。这需要您以特权模式运行容器。

    【讨论】:

    • 谢谢,我想我现在可能会使用can2udp 或者最终还是坚持使用--network=host
    【解决方案2】:

    您可以在运行 docker 镜像时使用 --cap-add=NET_ADMIN。这将允许您在容器内创建:

    $ sudo ip link add dev vcan0 type vcan
    $ sudo ip link set up vcan0
    

    当然 vcan 驱动是加载到主机上的。

    【讨论】:

      【解决方案3】:

      我已经写了一篇博文,应该可以帮助您了解大部分情况。在高层次上,您需要创建一个 vxcan 链接并将其一端移动到您的 docker 容器中。然后您可以将流量从您的 vcan 接口转发到 vxcan 接口的一端,并将其传输到容器内的 vxcan。您只需要使用正确的内核头文件包,并且在最后的 cangw 步骤中,您需要指定 vcan0 而不是 can0。

      https://www.lagerdata.com/blog/forwarding-can-bus-traffic-to-a-docker-container-using-vxcan-on-raspberry-pi

      【讨论】:

        猜你喜欢
        • 2020-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-03
        • 2015-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多