使用Windows Server 2016 TP5(来宾虚拟机)在Win7(主机)和Virtual Box上运行。在WS2016上,我运行docker,使用windowsservercore基础映像作为容器。
我尝试了一种车队管理系统,试图在单独的码头图像中启动多个模拟车辆。
这些车辆模拟器使用模拟gps将数据发送到虚拟COM端口,模拟车辆从中读取。
在Windows XP / 7 / Server 2016中,我已成功使用 com0com(2.2.2.0签名)来创建虚拟COM端口。
我的问题是在docker容器中安装虚拟com端口,或者将它们作为主机上的设备访问
我的第一次尝试是在docker中运行com0com,使用静默模式安装驱动程序工作正常,但是当使用已安装的应用程序创建虚拟COM端口对时,我遇到了问题。命令停止,如果我查看Application事件日志,每次尝试运行命令时都会看到这类行。
<date> <time> Information Windows Error Rep. .. 1001 Fault bucket , type 0
当尝试在主机中创建设备而不是传递设备时,我似乎无法访问它们
在容器中使用 com0com --list ,我可以看到设备,但与主机中的名称不同
在关联的Dockerfile中,我使用 com0com setupc.exe 将它们重命名为与主机上标识的名称相同的名称
主机上发出的模式命令正确地列出了端口,另一方面,使用insde的容器模式命令无法列出它们,只显示一个项目:CON
然后我尝试使用 --device = // ./ COM128://./COM128 参数将它们传递给docker run
注意!:这是正确的&#34;路径&#34;到设备?
显着的结果是零, com0com setupc 命令给出相同的结果,与模式相同
奇怪的是,当我运行powershell并列出serialports时,我得到主机上可用的预期comports,名称正确,但尝试打开其中一个会出现异常
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相同配置端口
更新
尝试了一种新的方法,在hyper-v中运行容器,使用-isolation标志来停靠运行,假设您可以在超级v容器中安装com0com驱动程序,而不必尝试从主持人那里分享。
在hyper-v中运行迫使我们改为运行nanoserver基本映像而不是windowsservercore基本映像。
由于安装程序(基于NSIS)是32位应用程序,纳米服务器只能运行64位应用程序,因此目前无法在nanoserver中运行com0com安装工具。
快速浏览表明NSIS的新版本(3.0)可以与com0com仓库中包含的NSIS脚本一起使用。
欢迎所有关于如何前进的想法!
P.S:msdn容器论坛上的同样问题posted
答案 0 :(得分:0)
更改为使用命名管道使其工作,因为似乎没有其他人使用docker for windows with serial ports。