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

时间:2019-01-19 12:40:31

标签: docker remote-desktop windows-server rds 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

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

docker run -it -p3389:3389 myimage powershell

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

Get-Service

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

netstat -an

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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