我想在一个 Docker Windows Server 容器中运行一个旧的 .NET 应用程序 (https://hub.docker.com/r/microsoft/windowsservercore/)。
如果这个应用程序不需要 UI 的话,一切都很容易。但是它的 UI 做了很多事情,不能通过命令行或其他 API 来完成。
基本上,最完美的情况是通过 RDP 连接到这个正在运行的容器。
据我所知,它不过是在某个 TCP 端口 (默认为 3389) 上运行的服务 (TermService)。
但似乎 TermService 在 microsoft/windowsservercore 容器中没有运行。
我找到了一篇文章,展示了如何激活它: https://withinrafael.com/2018/03/09/using-remote-desktop-services-in-containers/ 基本上,我保留了相同的 Dockerfile,只改变了一些凭据。
我使用以下命令启动容器:
当我尝试通过远程桌面客户端连接容器时,刚开始看起来一切正常。
如果这个应用程序不需要 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这样的工具能够正常工作,我就没关系了。我以前从未尝试过这个工具,但似乎它可以胜任这项工作。
您将如何控制在Windows容器中运行的GUI应用程序?