【发布时间】: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