Je souhaite exécuter une ancienne application .NET dans un conteneur de serveur Windows Docker ( https://hub.docker.com/r/Microsoft/windowsservercore/ ).
Tout serait facile si cette application ne nécessitait pas d'interface utilisateur. Son interface utilisateur fait beaucoup de choses et ces choses ne peuvent pas être effectuées via la ligne de commande ou une autre API.
Fondamentalement, l'idéal serait d'atteindre ce conteneur en cours d'exécution via RDP.
D'après ma compréhension, ce n'est rien de plus qu'un service (TermService) exécuté sur un certain port TCP (3389 étant le port par défaut).
Mais il semble que TermService ne fonctionne pas dans les conteneurs Microsoft/windowsservercore.
J'ai trouvé un article montrant comment l'activer: https://withinrafael.com/2018/03/09/using-remote-desktop-services-in-containers/
Fondamentalement, j'ai conservé le même Dockerfile, en changeant simplement certaines informations d'identification.
#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
Je lance le conteneur avec cette commande:
docker run -it -p3389:3389 myimage powershell
Lorsque je me connecte au conteneur et que je tape certaines commandes powershell pour répertorier les services en cours d'exécution, je peux voir que TermService fonctionne bien. Il s'agit de la commande que j'utilise pour répertorier les services.
Get-Service
Lorsque je liste les ports ouverts TCP, je peux voir que 3389 est écouté. C'est la commande que j'utilise pour afficher les ports ouverts.
netstat -an
Lorsque j'essaie de me connecter au conteneur via mon client de bureau distant, les choses semblent OK au début.
Je ne sais pas vraiment si les journaux sont générés quelque part ou non.
Je serais d'accord si au lieu de RDS, quelque chose comme TigerVNC fonctionnait. Je n'ai jamais essayé cet outil auparavant, mais il semble qu'il pourrait faire l'affaire.
Comment feriez-vous pour contrôler une application GUI s'exécutant dans un conteneur Windows?
Vous pouvez trouver des journaux pour le client RDP dans l'Observateur d'événements: "Journaux des applications et des services"\Microsoft\Windows\TerminalServices-ClientActiveXCore. Voici ce qui est dit pour moi:
RDPClient_SSL: Une erreur s'est produite lors de la transition de TsSslStateDisconnected à TsSslStateDisconnected en réponse à TsSslEventInvalidState (code d'erreur 0x8000FFFF).
RDP ClientActiveX a été déconnecté (Reason = 2)
la raison 2 est la session fermée par le client.
Ma paranoïa me dit que Microsoft est revenu et a corrigé l'image pour empêcher les gens d'utiliser RDP avec docker, mais qui sait, peut-être qu'il nous manque quelque chose d'évident.