2016-09-27 122 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

改爲使用命名管道得到它的工作,因爲沒有其他人好像是用泊塢窗與串行端口窗口。