Windows のアクセス権要求を理解¶
このページには、 Docker Desktop を Windows 上にインストールして実行するために必要な、アクセス権の要求についての情報が入っています。プロセス com.docker.service.exe
に対する
また、ホスト上、および、特権を持つ Windows Docker Engine と Windows コンテナーにおいて、 Administrator
(管理者)アクセス権を持つのではなく、コンテナを root
として実行するのも明確にします。
アクセス権の要求 ¶
Windows の Docker Desktop は Administrator
(管理者)特権がなくても実行できますが、インストール時には特権が必要です。ユーザがインストールしようとすると、インストールのために特権ヘルパーサービスに特権を許可するかどうか尋ねるユーザーアカウント制御(UAC)プロンプトが開きます。以降、ユーザは docker-users
グループのメンバーとして指定があれば、 Docker Desktop を管理者権限がなくても実行できます。インストールをするユーザは自動的にこのグループに追加されますが、他のユーザは手動で追加する必要があります。これにより、管理者は誰が Docker Desktop にアクセスできるか制御できるようになります。
Docker Desktop が特権ヘルパープロセス com.docker.service.exe
を使うようにしている理由は、限定的な一連の特権が必要な操作を処理するためです。この手法は、最小限の権限という原則に従い、間違いなく必要な処理のみ Administrator
(管理者)にアクセスできるようにするため、Docker Desktop に特権を与えないまま利用できます。
特権ヘルパー ¶
特権ヘルパー com.docker.service.exe
はバックグラウンドで動作する Windows サービスであり、 SYSTEM
特権を持ちます。名前付きパイプ //./pipe/dockerBackendV2
をリッスンします。開発者が Docker Desktop アプリケーションを実行するとき、名前付きパイプに接続して、サービスに対する命令を送信します。この名前付きパイプは保護されているため、 docker-users
グループのユーザーのみが接続できます。
サービスは以下の機能を処理します:
kubernetes.docker.internal
が Win32 hosts ファイルで定義されているのを確認します。DNS 名kubernetes.docker.internal
の定義により、Docker はコンテナと Kubernetes コンテクストとを共有できるようにします。レジストリ アクセス マネジメント ポリシーは、開発者に対しては読み込み専用のため、安全にキャッシュします。
Hyper-V 仮想マシン
"DockerDesktopVM"
を作成し、仮想マシンの開始、停止、削除といったライフサイクルを管理します。仮想マシンの名前はサービスコードによってハードコード(固定)されているため、サービスは他の仮想マシンの作成や操作ができません。VHDX ディスク容量を取得します。
VHDX ファイルやフォルダを移動します。
Windows Docker Engine を開始または停止し、実行中かどうかを確認します。
Windows コンテナーのデータファイルを削除します。
Hyper-V が有効化されているかどうかを確認します。
Hyper-V のブートローダーの有効化を確認します。
必要な Windows 機能が、インストール済みで有効化されているのを確認します。
ヘルスチェックを実施し、サービス自身のバージョン情報を取得します。
Linux VM 内で root としてコンテナを実行¶
Linux Docker デーモンとコンテナは、Docker によって管理されている軽量な Linux VM 内で実行されます。これはつまり、コンテナはデフォルトでは root
として実行しているとはいえ、Windows ホストマシンに対しての Administrator
(管理者)アクセス許可ではありません。Linux VM サーバはセキュリティ境界であり、ホストからどのリソースにアクセスできるか制限があります。ホストから Docker コンテナ内にバインド マウントされる、ユーザースペースで作成されたファイルサーバーやあらゆるディレクトリは、元々のパーミッションを維持したままです。まだアクセスできないファイルに対しては、ユーザーに対してアクセス権を与えません。
Windows コンテナー¶
仮想マシン内で実行される Linux Docker Engine やコンテナとは異なり、Windows コンテナーはオペレーティングシステムとしての機能です。そのため、実行には Windows ホストで Administrator
(管理者)特権が直接必要です。Windows コンテナーを開発者に対して実行させたくない組織の場合、 バージョン 4.11 から機能を無効かするために、インストーラで --no-windows-containers
のフラグが利用できます。
ネットワーク機能¶
ネットワーク疎通のため、Docker Desktop はユーザー空間プロセス( vpnkit
)を使います。これは、ユーザが Docker Desktop を起動する時、ファイアウォールのルールや、VPN、HTTP プロキシプロパティ等の制限を継承します。
参考
- Understand permission requirements for Windows | Docker Documentation
https://docs.docker.com/desktop/windows/permission-requirements/