web-dev-qa-db-ja.com

リモートデスクトップ経由で実行中のWindows Serverコンテナーに接続する方法はありますか?

古い.NETアプリケーションをDocker Windowsサーバーコンテナー( 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を保持し、一部の資格情報を変更しただけです。

#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アプリケーションをどのように制御しますか?

15
FrelonQuai

イベントビューアでRDPクライアントのログを見つけることができます: "アプリケーションとサービスログ"\Microsoft\Windows\TerminalServices-ClientActiveXCore。ここに私のために言われていることがある:

  1. クライアントはサーバーへのマルチトランスポート接続を確立しました。
  2. RDPClient_SSL:TsSslEventInvalidStateに応答してTsSslStateDisconnectedからTsSslStateDisconnectedに移行するときにエラーが発生しました(エラーコード0x8000FFFF)。

  3. RDP ClientActiveXが切断されました(理由= 2)

理由2は、クライアントによって閉じられたセッションです。

私のパラノイアは、Microsoftが戻ってイメージにパッチを適用して人々がDockerでRDPを使用できないようにしたが、明らかな何かを見落としているだけかもしれないと私に話しています。

3
Vlad