有没有办法通过远程桌面连接到运行中的Windows Server容器?

Fre*_*uai 13 remote-desktop rds windows-server docker docker-for-windows

我想在docker Windows服务器容器(https://hub.docker.com/r/microsoft/windowsservercore/)中运行旧的.NET应用程序。

如果此应用程序不需要UI,一切将变得容易。它的UI做了很多工作,而这些工作无法通过命令行或其他API来完成。

基本上,完美的事情是通过RDP到达此运行容器。

据我了解,它不过是在某个TCP端口(默认端口3389)上运行的服务(TermService)。

但似乎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
Run Code Online (Sandbox Code Playgroud)

我使用以下命令启动容器:

docker run -it -p3389:3389 myimage powershell
Run Code Online (Sandbox Code Playgroud)

当我连接到容器并键入一些powershell命令以列出正在运行的服务时,我可以看到TermService运行良好。这是我用来列出服务的命令。

Get-Service
Run Code Online (Sandbox Code Playgroud)

当我列出打开的TCP端口时,可以看到监听了3389。这是我用来显示打开的端口的命令。

netstat -an
Run Code Online (Sandbox Code Playgroud)

当我尝试通过远程桌面客户端连接到容器时,开始时一切正常。

  • 它要求我提供主机。
  • 然后输入用户名和密码。
  • 如果我输入了错误的凭据,则说“凭据错误”,因此与服务器之间的通信良好。
  • 如果我输入良好的凭据,则什么也不会发生。完全没有错误消息,但也没有显示屏...

我真的不知道日志是否在某处生成。

如果像TigerVNC这样的东西代替RDS,我会好的。我以前从未尝试过此工具,但似乎可以完成这项工作。

您将如何控制Windows容器中运行的GUI应用程序?

Vla*_*lad 6

您可以在事件查看器中找到 RDP 客户端的日志:“应用程序和服务日志”\Microsoft\Windows\TerminalServices-ClientActiveXCore。这是对我说的:

  1. 客户端已与服务器建立了多传输连接。
  2. RDPClient_SSL:从 TsSslStateDisconnected 转换为 TsSslStateDisconnected 以响应 TsSslEventInvalidState(错误代码 0x8000FFFF)时遇到错误。

  3. RDP ClientActiveX 已断开连接(原因= 2)

原因 2 是客户端关闭了会话。

我的偏执告诉我,微软回过头来修补映像以防止人们将 RDP 与 docker 一起使用,但谁知道呢,也许我们只是遗漏了一些明显的东西。