在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上的容器論壇