このドキュメントで説明されているソフトウェアはサポートされていないか、拡張サポートが提供されています。
現在サポートされているリリースにアップグレードすることをお薦めします。

3.3 ユーザー・ネームスペース再マッピングの構成

次の手順は、バージョン1.10以上のDockerに適用されます。

Dockerコンテナ内で実行されているプロセスに、ホスト・システムの代替ユーザー・ネームスペース・マッピングを使用した実行を強制するには、--userns-remapオプションをDocker Engineの起動パラメータとして使用します。 この機能により、ホスト・システムにセキュリティのレイヤーが追加されます。 各コンテナ内で実行されているプロセスは、/etc/subuidおよび/etc/subgidで定義されている代替マッピングのUIDおよびGIDを使用して実行されます。 shadow-utilsプロジェクトには、Linuxカーネル内のユーザー・ネームスペースの機能である従属ユーザー・マッピングが用意されています。 詳細は、https://docs.docker.com/edge/engine/reference/commandline/dockerd/#daemon-user-namespace-optionsを参照してください。

ユーザー・ネームスペース・マッピングを実装する手順:

  1. /etc/subuidファイルを作成して編集します。

    Dockerのドキュメントでは、このファイルを自動的に作成して移入することを提案していますが、この機能は、usermodコマンドで使用できるコードに依存しており、現在このコードはOracle Linuxに組み込まれていません。 このファイルがない場合は手動で作成し、必要なユーザー・マッピングを移入します。

    user:start_uid:uid_count

    デフォルトのユーザー・ネームスペース再マッピングを構成する場合は、dockremapユーザーのエントリを追加します。 あるいは、この目的に使用する予定の権限のないユーザーのエントリを追加します。 次に例を示します。

    dockremap:100000:65536

    前述の例では、dockremapは、再マッピングに使用される権限のないシステム・ユーザーです。100000は、コンテナ内のプロセスの実行に使用される使用可能なUIDの範囲における最初のUIDです。65536は、コンテナで使用されるUIDの最大数です。 このエントリ例に基づいて、rootユーザーとしてコンテナ内で実行されているプロセスは、ホスト・システムでUID 100000を使用して実行されるように起動されます。 コンテナ内のプロセスがUIDが500のユーザーとして実行されると、ホスト・システムでは、UID 100500で実行されます。

  2. /etc/subgidファイルを作成して編集します。 ユーザーIDマッピングに適用されるのと同じ原則がグループIDマッピングに適用されます。

    デフォルトのユーザー・ネームスペース再マッピングを構成する場合は、dockremapグループのエントリを追加します。 あるいは、この目的に使用する予定のグループのエントリを追加します。 次に例を示します。

    dockremap:100000:65536
  3. /etc/sysconfig/dockerを編集し、次のように関連するremapパラメータをOPTIONS行の最後に追加して、--userns-remapパラメータを有効にして実行されるようにdockerサービスを構成します。

    # /etc/sysconfig/docker 
    # Modify these options if you want to change the way the docker daemon runs
    OPTIONS='--userns-remap=default

    --userns-remapdefaultに設定すると、Dockerによってdockremapという名前のユーザーおよびグループが自動的に作成されます。 dockremapユーザーおよびグループのエントリが/etc/subuidおよび/etc/subgidに存在する必要があります。 あるいは、システムにすでに存在する別の権限のないユーザーおよびグループを使用して実行されるように、--userns-remapオプションを設定します。 これを選択した場合は、/etc/subuidおよび/etc/subgidファイルでdockremapユーザーを適切なユーザー名およびグループ名と置き換えます。

  4. サービス構成の変更をアクティブにするには、dockerサービスを再起動します:

    # service docker restart

    Docker Engineでは、コンテナの実行者やコンテナ内でのコマンドの実行者に関係なく、同じユーザー・ネームスペース再マッピング・ルールがすべてのコンテナに適用されます。