2016-09-27 124 views
0

在Windows7(主机)和Virtual Server上运行Windows Server 2016 TP5(guest虚拟机vm)。在WS2016上,我运行docker,使用容器的windowsservercore基础映像。在WS2016码头集装箱内访问虚拟COM端口

我正在尝试一种车队管理系统,我尝试在单独的码头图像中启动多个模拟车辆。

这些车辆模拟器使用模拟gps,它将数据发送到虚拟com端口,模拟车辆从该端口读取数据。

在windows XP/7/Server 2016中,我成功地使用了com0com(2.2.2.0 signed)来创建虚拟COM端口。

我的问题越来越泊坞窗容器内安装了虚拟COM口,或者访问它们的设备在主机上

我第一次尝试已经运行com0com内泊坞窗,安装驱动程序的做工精细使用静音模式,但是当使用安装的应用程序创建虚拟COM端口对时,我遇到了问题。命令停止,如果我查看应用程序事件日志,每次尝试运行该命令时都可以看到这种类型的几行。

<date> <time> Information Windows Error Rep. .. 1001 Fault bucket , type 0 

当,而不是试图建立在主机的设备,而是通过我似乎无法访问它们

使用com0com --list在容器内,我可以看到设备的设备但没有与主机中的I同名

在相关的Dockerfile中,我使用com0com setupc.exe将其重命名为与主机上标识的名称相同的名称

主机上发行的模式命令列出的端口正常,从insde容器确实,另一方面使用模式命令无法一一列举,只显示一个项目:CON

我又试图通过他们使用--device = ///COM128://./COM128参数泊坞窗运行

注意!:这是正确的“路径”的设备?

这样做的noticable结果为零,com0com setupc命令的结果相同,同样具有模式

奇怪的是,当我运行PowerShell和列出serialports我得到的预期相称可用在主机上,用正确的名称,但试图打开其中的一个给出了一个例外

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),将它们设置在主机,尝试使用p打开端口时的最终结果S IN的容器是一样的com0com配置的端口

更新:

尝试一种新的方法,运行在Hyper-V的容器而不是使用分离所标志泊坞窗来看,考虑到论文表明您可以将com0com驱动程序安装在hyper-v容器中,而不必尝试从主机共享这些驱动程序。

在hyper-v中运行迫使我们更改为运行nanoserver基本映像而不是windowsservercore基本映像。

由于安装程序(基于NSIS的)是一个32位应用程序,纳米服务器只能运行64位应用程序,因此目前停留在无法在nanoserver中运行com0com安装工具。

快速浏览表明NSIS的新版本(3.0)可以与com0com回购库中包含的NSIS脚本一起使用。

欢迎关于如何前进的所有想法!

P.S:同样的问题posted MSDN上的容器论坛

回答

0

改为使用命名管道得到它的工作,因为没有其他人好像是用泊坞窗与串行端口窗口。