docker 在Windows 10容器上启用远程桌面

falq053o  于 2023-01-25  发布在  Docker
关注(0)|答案(2)|浏览(401)

我正在尝试在容器映像上启用远程桌面。

停靠文件

FROM mcr.microsoft.com/windows:2004

EXPOSE 3389

RUN net user administrator Stack0verflow
RUN net user administrator /active:yes

# I tried disabling the firewall; but this command errors as Windows Defender Firewall service 
# is not enabled; so presumably if the firewall's not running, it's not a firewall issue.
#RUN netsh advfirewall set allprofiles state off

# switch shell to powershell (note: pwsh not available on the image)
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue'; $ExecutionPolicy = 'Unrestricted';"]

# enable RDP (value is 1 on the base image)
RUN Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name 'fDenyTSConnections' -Type 'DWord' -Value 0
# per https://www.withinrafael.com/2018/03/09/using-remote-desktop-services-in-containers/
RUN Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name 'TemporaryALiC' -Type 'DWord' -Value 1

注:由于它是Windows映像,我已将Docker桌面切换为Windows容器(参考:Docker:“清单列表条目中没有与windows/amd 64匹配的清单”)
然后,我通过以下方式构建此映像:docker build -t win10poc .
...并通过以下方式运行:docker run --expose 3389 --publish 3390:3389 -it win10poc
容器运行成功;但我无法连接到它(在主机设备上使用计算机名为127.0.0.1:3390mstsc;或者甚至进行Test-NetConnection -ComputerName 127.0.0.1 -Port 3390)。
我还尝试过从容器的命令提示符运行powershell -command "Test-NetConnection -ComputerName 'localhost' -Port 3389";但这也返回失败;这表明服务没有侦听此端口。
注意:在容器上运行net start TermService返回The requested service has already been started;所以它应该在听。
我的主机设备运行的是Windows 10.0.19041.264。
注意:我在Windows Server中看到过类似的问题;虽然再次询问,因为这是针对服务器而不是桌面,这个问题有较少的信息已经尝试过,并没有答案。因此,我希望这不算作一个重复。

qcuzuvrc

qcuzuvrc1#

构建Dockerfile的reference you used声明在1709_KB4074588之后RDP无法再工作。今天提取该标记也不起作用:你从服务器得到一个响应,但是不能执行任何东西。我不知道windows和servercore映像在RDP方面有什么不同,而且我也不是windowsMaven。到目前为止我的经验(使用xfreerdp作为客户端):

  • Windows/服务器核心:1607 cexecsvc正在运行,端口3389未侦听
  • windows/servercore:1709可以连接到RDP,但执行应用程序会导致ERRINFO_LOGOFF_BY_USER
  • Windows/服务器核心:1709_KB4074588的行为与1709相同

研究还表明,您需要禁用远程执行白名单(不知道正确的名称)。

  • reg add“HKEY_LOCAL_MACHINE\软件\策略\Microsoft\Windows NT\终端服务”/v f允许未列出的远程程序/t REG_DWORD /d 1
  • reg add“HKEY_LOCAL_MACHINE\软件\Microsoft\Windows NT\当前版本\终端服务器\TSAppAllowList”/v f禁用的允许列表/t REG_DWORD /f /d 1

在阅读了brief about sessions, desktops and stations之后,我编写了一个枚举会话的快速测试(请参见LsaEnumerateLogonSessionsLsaGetLogonSessionData),并看到虽然正常RDP会话显示许多(为什么?不知道)同一用户的会话,其中一些是交互式的(在我的例子中为10 - CachedInteractive)Docker示例中的控制台显示类型为5的ContainerAdministrator用户的单个会话(代理-不支持),所以据我所知,没有办法从这个会话中获得一个交互式桌面。

lp0sw83n

lp0sw83n2#

Windows Containers似乎不支持GUI应用程序,也没有计划在将来添加它。
参考文献:

  • https://github.com/microsoft/Windows-Containers/issues/306#issuecomment-1376440627
  • https://learn.microsoft.com/en-us/virtualization/windowscontainers/quick-start/lift-shift-to-containers#what-cant-be-moved-to-windows-containers

相关问题