Есть ли способ подключиться через удаленный рабочий стол к работающему контейнеру Windows Server?

Я хочу запустить старое приложение .NET в контейнере Docker Windows Server (https://hub.docker.com/r/microsoft/windowsservercore/).

Все было бы легко, если бы это приложение не требовало пользовательского интерфейса. Его пользовательский интерфейс делает много вещей, и это не может быть сделано через командную строку или другой API.

По сути, идеальным решением было бы достичь этого работающего контейнера через RDP.

Насколько я понимаю, это не что иное, как служба (TermService), работающая на определенном порту TCP (по умолчанию 3389).

Но похоже, что TermService не работает в контейнерах microsoft/windowsservercore.

Я нашел статью, показывающую, как ее активировать: https://withinrafael.com/2018/03/09/using-remote-desktop-services-in-containers/

По сути, я сохранил тот же Dockerfile, просто изменив некоторые учетные данные.

#escape='
FROM microsoft/windowsservercore:1709_KB4074588
RUN net user /add jerome
RUN net user jerome aDifficultPassword
RUN net localgroup "Remote Desktop Users" jerome /add
RUN net localgroup "Administrators" jerome /add
RUN cmd /k reg add "HKLM\System\CurrentControlSet\Control\Terminal Server" /v TemporaryALiC /t REG_DWORD /d 1

Я запускаю контейнер с этой командой:

docker run -it -p3389:3389 myimage powershell

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

Get-Service

Когда я перечисляю открытые порты TCP, я вижу, что прослушивается 3389. Это команда, которую я использую, чтобы показать открытые порты.

netstat -an

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

  • Он спрашивает меня о хозяине.
  • Затем для имени пользователя и пароля.
  • Если я ввожу неверные учетные данные, он говорит мне "неправильные учетные данные", поэтому связь с сервером налажена.
  • Если я ввожу хорошие учетные данные, ничего не происходит. Нет сообщений об ошибках, но нет и экрана дисплея...

Я действительно не знаю, генерируются ли журналы где-то или нет.

Я был бы в порядке, если бы вместо RDS работало что-то вроде TigerVNC. Я никогда не пробовал этот инструмент раньше, но кажется, что он может сделать эту работу.

Как бы вы сделали, чтобы контролировать приложение с графическим интерфейсом, работающее в контейнере Windows?

Ответы

Ответ 2

Журналы для клиента RDP можно найти в средстве просмотра событий: "Журналы приложений и служб"\Microsoft\Windows\TerminalServices-ClientActiveXCore. Вот что говорит для меня:

  1. Клиент установил мультитранспортное соединение с сервером.
  2. RDPClient_SSL: Произошла ошибка при переходе от TsSslStateDisconnected к TsSslStateDisconnected в ответ на TsSslEventInvalidState (код ошибки 0x8000FFFF).

  3. RDP ClientActiveX был отключен (причина = 2)

причина 2 - сессия закрыта клиентом.

Моя паранойя говорит мне, что Microsoft вернулась и исправила изображение, чтобы люди не могли использовать RDP с докером, но кто знает, может быть, мы просто упускаем что-то очевидное.