6

我正在做一个需要我在主机上创建虚拟 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 ... . 唯一的问题是不再有网络隔离 b/w docker 主机和容器。有没有办法实现上述但不共享主机网络?

4

3 回答 3

2

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

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

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

于 2020-07-23T18:22:06.017 回答
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

于 2020-11-09T15:48:52.370 回答
1

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

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

当然 vcan 驱动程序是在主机上加载的。

于 2020-09-01T06:35:09.290 回答