与Docker容器共享虚拟网络

时间:2020-07-21 16:48:48

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

我正在从事一个项目,该项目需要我在主机上创建虚拟CAN网络

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

我的ifconfig:

enter image description here

我的问题是如何与我的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容器。唯一的问题是不再有网络隔离黑白码头工人主机和容器。有没有一种方法可以实现上述目的,但又不共享主机网络?

3 个答案:

答案 0 :(得分:2)

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

我过去曾使用此方法将远程设备上的物理CAN总线连接到笔记本电脑上的虚拟CAN接口。但是它对于Docker容器也应该工作得很好。

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

答案 1 :(得分:1)

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

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

当然vcan驱动程序已加载到主机上。

答案 2 :(得分:1)

我写了一篇博客文章,应该可以带给您大部分帮助。在较高的层次上,您需要创建一个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