2016-09-27 2 views
0

Работа на Win7 (хосте) и виртуальная коробка с Windows Server 2016 TP5 (guest vm). На WS2016 я запускаю докер, используя базовое изображение windowsservercore для контейнеров.Доступ к виртуальным COM-портам внутри контейнера-докере WS2016

Я пытаюсь создать систему управления автопарком, где я пытаюсь запустить несколько имитируемых транспортных средств внутри отдельных изображений докеров.

В этих симуляторах используются имитированные GPS-сигналы, которые отправляют данные в виртуальный com-порт, из которого считываются моделируемые транспортные средства.

В Windows XP/7/Server 2016 я успешно использовал com0com (2.2.2.0 подписанный) для создания виртуальных COM-портов.

Моя проблема заключается в получении установленных внутри Docker контейнера виртуальные COM-порты, в качестве альтернативы доступа к ним в качестве устройств на хосте

Моя первая попытка была запущен com0com внутри грузчиком, установка драйверов работают отлично, используя бесшумный режим, но при создании виртуальных пар com-портов с использованием установленного приложения я сталкиваюсь с проблемами. Команда останавливается, и если я просматриваю журнал событий приложения, я могу увидеть несколько строк такого типа для каждого раза, когда я пытаюсь запустить команду.

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

Когда вместо того, чтобы пытаться создать устройства в хост и вместо прохождения устройства я, кажется, не в состоянии получить доступ к ним

Использование com0com --list в контейнере можно увидеть устройства но не с таким же именем, как я в принимающем

в соответствующем Dockerfile я переименовывать их, используя com0com setupc.exe с таким же названием, как указано на хосте

Режим команда выдается на хосте перечислены порты должным образом, с помощью команды режима с insde контейнер делает с другой стороны, не в состоянии перечислить их, показывая только один пункт: CON

Затем я попытался прохождения их с помощью --device = ///COM128:. //./COM128 аргумент Docker запустить

ВНИМАНИЕ !: это правильный "путь" к устройствам?

заметно результат этого равен нулю, то 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), установив их в host, конечный результат при попытке открыть порт с помощью p ы в контейнере такое же, как и для com0com сконфигурировано портов

Обновление:

Пытались новый подход, запустив контейнер в Hyper-V вместо того, чтобы, используя флаг -isolation, чтобы запустить докер, учитывая что вы сможете установить драйвер com0com в контейнер hyper-v, не пытаясь поделиться им с хостом.

Запуск в гипер-v заставил нас перейти на запуск базового изображения nanoserver вместо базового образа windowsservercore.

В настоящее время не поддерживается запуск программы установки com0com на nanoserver, поскольку установщик (основанный на NSIS) является 32-разрядным приложением, наноссервер способен работать только на 64-битных приложениях.

Быстрый взгляд указывает, что новая версия (3.0) NSIS может использоваться вместе со сценариями NSIS, включенными в репозиторий com0com.

Все идеи о том, как двигаться вперед, приветствуются!

P.S: Тот же вопрос posted на MSDN контейнеры форум

ответ

0

Изменен с помощью именованных каналов, чтобы заставить его работать, так как никто не кажется, использует докер для окон с последовательными портами.