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

Я хочу запустить старое приложение .NET в контейнере сервера Windows docker (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?


person FrelonQuai    schedule 19.01.2019    source источник
comment
на windowsservercore:latest на порту 3389 даже ничего не прослушивается...   -  person Florian Koch    schedule 18.04.2019
comment
Здравствуйте, @FlorianKoch. Вам удалось заставить это работать? Я пытаюсь сделать то же самое на контейнере Docker для Windows Server 2019, но безуспешно.   -  person Kiran Hegde    schedule 13.08.2019
comment
@KiranHegde, к сожалению, нет, кажется, Microsoft явно сделала это невозможным. Есть некоторые проблемы с удаленным рабочим столом и контейнерами, и они не собираются поддерживать этот сценарий (по крайней мере, на данный момент).   -  person Florian Koch    schedule 14.08.2019
comment
@FlorianKoch Спасибо. Есть ли способ отобразить графический интерфейс приложения, установленного в контейнере, в моей хост-системе? Например, если у меня установлена ​​Visual Studio в контейнере, мне бы хотелось открыть ее в моей хост-системе. Насколько я знаю, это возможно для контейнеров Linux с использованием X Server. Знаете ли вы что-нибудь подобное для контейнеров Windows?   -  person Kiran Hegde    schedule 15.08.2019
comment
@KiranHedge Я не думаю, что есть что-то подобное, по крайней мере, я не смог его найти. Для систем Linux вы открываете порт для передачи X из вашего контейнера, как вы делаете для сеансов ssh -X. Вам понадобится аналогичное решение для Windows.   -  person Florian Koch    schedule 15.08.2019
comment
Я имею в виду, вы можете попробовать использовать teamviewer или что-то еще, но я не знаю, поддерживает ли он автоматизацию и работает ли он вообще в контейнере.   -  person Florian Koch    schedule 15.08.2019


Ответы (1)


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

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

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

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

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

person Vlad    schedule 14.10.2019