运行在Win7(主机)和Virtual上的Windows 2016 TP5(来宾vm)。在WS2016上,我使用用于容器的windowsservercore基映像来运行docker。
我正在尝试一种车队管理系统,在这种系统中,我试图在独立的码头图像中启动多辆模拟车辆。
这些车辆模拟器使用模拟gps向虚拟com端口发送数据,由模拟车辆从中读取数据。
在windows /7/Server 2016中,我成功地使用了com0com(2.2.2.0签名)来创建虚拟com端口。
我的问题是如何将虚拟com端口安装在对接器容器中,或者将它们作为主机上的设备访问。
我的第一次尝试是在坞内运行com0com,使用静默模式安装驱动程序很好,但是当使用已安装的应用程序创建虚拟com端口对时会遇到问题。该命令停止运行,如果我查看Application日志,每次尝试运行该命令时,我都可以看到这种类型的几行。
<date> <time> Information Windows Error Rep. .. 1001 Fault bucket , type 0 相反,当尝试在主机中创建设备并传递设备时,我似乎无法访问它们。
使用com0com --列出容器中的,我可以看到设备,但与主机中的名称不同。
在关联的Dockerfile中,我使用com0com setupc.exe将它们重命名为与主机上标识的名称相同的名称
在主机上发出的模式命令正确地列出了端口,使用了容器执行的模式命令,但没有列出端口,只显示了一个项: CON
然后,我尝试使用--device=//./COM128://./COM128参数将它们传递给docker运行。
注意:这是到达设备的正确“路径”吗?
值得注意的结果是零,com0com setupc命令提供相同的结果,与模式相同。
奇怪的是,当我运行powershell并列出序列化端口时,我会得到主机上可用的预期的comport,并给出正确的名称,但是尝试打开其中的一个会导致异常。
PS C:\sims\com0com> [System.IO.Ports.SerialPort]::getportnames()
COM128
COM129
PS C:\sims\com0com> $comports=[System.IO.Ports.SerialPort]::getportnames()
PS C:\sims\com0com> $port= new-Object System.IO.Ports.SerialPort $comports[0],9600,None,8,one
PS C:\sims\com0com> $port.open()
Exception calling "Open" with "0" argument(s): "The port 'COM128' does not exist."最后,使用另一个虚拟com端口软件(Eltima),在主机中设置它们,尝试在容器中使用ps打开端口时,最终结果与com0com配置的端口相同。
更新:
尝试了一种新的方法,在超级v中运行容器,使用-isolation标志进行对接运行,考虑到您可以在超级v容器中安装com0com驱动程序,而不必尝试从主机共享它们。
在超级v中运行迫使我们改变为运行纳米服务器的基本映像,而不是窗口服务器核心的基本映像。
目前,由于安装程序(基于NSIS的)是32位应用程序,纳秒服务器只能运行64位应用程序,因此无法在纳秒服务器中运行com0com安装工具。
快速浏览表明,新版本(3.0)的NSIS可以与包含在com0com回购中的NSIS脚本一起使用。
所有关于如何前进的想法都是欢迎的!
P.S: msdn容器论坛上的同一个问题已发布
发布于 2016-10-25 11:17:15
更改为使用命名管道使其工作,因为似乎没有其他人使用的窗口与串口对接。
https://stackoverflow.com/questions/39723302
复制相似问题