我想在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应用程序?
答案 0 :(得分:2)
您可以在事件查看器中找到RDP客户端的日志:“应用程序和服务日志” \ Microsoft \ Windows \ TerminalServices-ClientActiveXCore。这就是我的意思:
RDPClient_SSL:响应TsSslEventInvalidState从TsSslStateDisconnected过渡到TsSslStateDisconnected时遇到错误(错误代码0x8000FFFF)。
RDP ClientActiveX已断开连接(原因= 2)
原因2被客户端关闭了会话。
我的偏执狂告诉我,微软回过头去修补了该映像,以防止人们将docker与RDP一起使用,但是谁知道呢,也许我们只是缺少一些明显的东西。