【问题标题】:Is there a way to connect through remote desktop to a running Windows Server container?有没有办法通过远程桌面连接到正在运行的 Windows Server 容器?
【发布时间】:2019-06-13 11:58:07
【问题描述】:

我想在 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

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

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

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

如果不是 RDS,而是使用 TigerVNC 之类的东西,我会没事的。我以前从未尝试过这个工具,但它似乎可以完成这项工作。

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

【问题讨论】:

  • windowsservercore:latest 上甚至没有任何东西在监听端口 3389...
  • 你好@FlorianKoch 你能让这个工作吗?我在 Windows server 2019 Docker 容器上尝试相同,但没有任何运气。
  • @KiranHegde 遗憾的是,不,这似乎是微软明确规定的。远程桌面和容器存在一些问题,他们不打算支持这种情况(至少现在)
  • @FlorianKoch 谢谢。有没有办法可以在我的主机系统上显示安装在容器上的应用程序的 GUI?例如,如果我在容器上安装了 Visual Studio,我确实想在我的主机系统上打开它。据我所知,这对于使用 X Server 的 Linux 容器是可能的。你知道 Windows 容器有什么类似的吗?
  • @KiranHedge 我不认为有这样的东西,至少我找不到它。对于 linux 系统,您打开一个端口以将 X 从容器中导出,就像您为 ssh -X 会话所做的那样。您需要一个类似的 WIndows 解决方案。

标签: docker remote-desktop windows-server rds docker-for-windows


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 2017-11-23
    • 2012-04-12
    • 2011-11-30
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多