Mac のアクセス権要求を理解¶
このページには、 Docker Desktop を Mac 上にインストールして実行するために必要な、アクセス権の要求についての情報が入っています。プロセス com.docker.vmnetd に対する
また、ホスト上で root アクセス権を持つのではなく、コンテナを root として実行するのも明確にします。
アクセス権の要求 ¶
標準のセットアップ手順では、 Docker Desktop for Mac のインストールに管理者権限を必要としません。ですが、始めての実行時、 root 権限の許可が必要です。Docker Desktop の初回起動時、特権ヘルパーサービスをインストールする権限を与えるよう、管理者としてログインするようユーザに求めます。以降の実行では、 root 権限は不要です。
Docker Desktop が特権ヘルパープロセス com.docker.vmnetd を使うようにしている理由は、限定的な一連の特権が必要な操作を処理するためです。この手法は、最小限の権限という原則に従い、間違いなく必要な処理のみ root にアクセスできるようにするため、Docker Desktop に特権を与えないまま利用できます。
Docker Desktop for Mac のバージョン 4.11 以上からは、 コマンドでのインストール に --user フラグを使うと、バックグランドで特権ヘルパーサービスが実行するのを阻止します。この結果、 com.docker.vmnet はインストール中のみ利用されますが、実行時には無効化されます。そうすると、 Docker Desktop を始めて実行する時に、管理者としてのログインを求める画面が表示されません。具体的に、 --user フラグとは:
以前の
com.docker.vmnetdが存在する場合、アンインストールユーザに対する :ruby;`シンボリックリンク <symlinks>` のセットアップ
localhostとkubernetes.docker.internalが/etc/hostsに確実に現れるようにする
この手法には、以下の制限があります:
特権ヘルパー ¶
特権ヘルパーは launched によって起動され、前述の通り、無効化しなければ実行時にバックグラウンドで動き続けます。Docker Desktop バックエンドとは、 Unix ドメインソケット /var/run/com.docker.vmnetd.sock で通信します。次のような処理が行われます:
/usr/local/binにシンボリックリンクをインストールまたはアンインストールする。これによりdockerCLI がユーザのシェル上のパスになくても、ログアウトやログアウトせずに利用できる。特権ポートの
確保 は 1024 以下。いわゆる「特権ポート 」は一般的にセキュリティ境界として使用していない。しかし、 OS では依然として特権のないプロセスによるポート確保を防ごうとするので、docker run -p 80:80 nginxのようなコマンドは使えない。localhostとkubernetes.docker.internal` が ``/etc/hostsで定義されるようにする。いくつかの古い macOS へのインストールでは、/etc/hostsにlocalhostがないため、 Docker は起動失敗します。 DNS 名kubernetes.docker.internalの定義により、Kubernetes のコンテキストにコンテナを共有できる。開発者には、読み込み専用のレジストリ アクセス管理ポリシーを、安全にキャッシュする。
特権へルパをアンインストールする。
Linux VM 内で root としてコンテナを実行¶
Docker デーモンとコンテナは、Docker によって管理されている軽量な Linux VM 内で実行されます。これはつまり、コンテナはデフォルトでは root として実行しているとはいえ、Mac ホストマシンに対しての root アクセス許可ではありません。Linux VM サーバはセキュリティ境界であり、ホストからどのリソースにアクセスできるか制限があります。ホストから Docker コンテナ内にバインド マウントされるあらゆるディレクトリは、元々のパーミッションを維持したままです。
参考
- Understand permission requirements for Mac
https://docs.docker.com/desktop/mac/permission-requirements/