Я хочу запустить старое приложение .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?