我正在从事一个项目,该项目需要我在主机上创建虚拟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容器。唯一的问题是不再有网络隔离黑白码头工人主机和容器。有没有一种方法可以实现上述目的,但又不共享主机网络?
答案 0 :(得分:2)
我还没有找到一种在没有--network=host
的情况下与Docker容器共享CAN网络接口的方法,但是有一种可能的解决方法。您可以使用canneloni或can2udp之类的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。