Ответ 1
Кажется, вам нужно настроить некоторые записи реестра: https://withinrafael.com/2018/03/09/using-remote-desktop-services-in-containers/
Я хочу запустить старое приложение .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?
Кажется, вам нужно настроить некоторые записи реестра: https://withinrafael.com/2018/03/09/using-remote-desktop-services-in-containers/
Журналы для клиента RDP можно найти в средстве просмотра событий: "Журналы приложений и служб"\Microsoft\Windows\TerminalServices-ClientActiveXCore. Вот что говорит для меня:
RDPClient_SSL: Произошла ошибка при переходе от TsSslStateDisconnected к TsSslStateDisconnected в ответ на TsSslEventInvalidState (код ошибки 0x8000FFFF).
RDP ClientActiveX был отключен (причина = 2)
причина 2 - сессия закрыта клиентом.
Моя паранойя говорит мне, что Microsoft вернулась и исправила изображение, чтобы люди не могли использовать RDP с докером, но кто знает, может быть, мы просто упускаем что-то очевидное.