无法将接口连接到 Docker 容器

Cannot connect interface to Docker container

我正在尝试通过 Docker 容器连接并 运行 一个设备 (LiDAR),因为它需要 Ubuntu 16 而我的计算机是 Ubunutu 20。

我让设备在 docker 容器内 ping,但是当我尝试使用它时无法识别它。

我做了什么:

根据要求制作了 Docker 文件(添加了 EXPOSE 以公开所有端口)

使用以下方法构建 docker 图像: docker build -t testLidar

然后我用 docker run -d -P --name test_Lidar (imagename)

然后 docker exec -t test_Lidar (device_ip) 有效

我可以在容器内 ping 我的 LiDAR IP,但是当我这样做时 ip a 我看不到连接到我的机器的接口。

卡在这个问题上 3 天了,有什么建议吗?

注意:我在 Ubuntu 16 机器上完成了完全相同的步骤。唯一的变化是 docker run 命令有 --net host 而不是 -P 标签,我的设备运行良好。我觉得这是我问题的根源。

使用 --net host 标志和 docker run 将容器附加到主机的网络堆栈,并使其可供网络中的其他主机使用。

当您使用 --net host 时,您实际上是将容器附加到主机的网络堆栈。默认情况下,容器连接到类型为 bridgedefault 网络,并且可以相互通信。然后,您只能使用通常位于子网 172.17.0.0/16.

中的 IP 地址从您的主机访问它们

使用 -P 实际上是将容器中的公开端口与主机上随机选择的空闲端口绑定在一起。它应该用于公开网络服务(例如,带有端口 80 的 Web 服务器),但不适用于 ICMP ping。