Работа на 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 контейнеры форум