近年、クラウド コンピューティングとコンテナ化テクノロジの急速な発展により、Docker は最も人気のあるコンテナ テクノロジの 1 つになりました。ただし、Docker は広く使用されていますが、Docker コンテナーを使用するときに解決する必要がある一般的な問題がまだいくつかあります。問題の 1 つは、Docker コンテナ内にユーザーを追加できないことです。
Docker コンテナにユーザーを追加できないのはなぜですか?
まず、Docker が内部でどのように動作するかを理解する必要があります。 Docker は、Linux カーネル名前空間を使用してプロセス間の分離を実現します。これらの名前空間には、PID 名前空間、UTS 名前空間、ネットワーク名前空間などが含まれます。このうち、ユーザー名前空間は、ユーザーとユーザー グループ ID を分離するために使用されます。デフォルトでは、Docker コンテナはホスト ユーザー名前空間の UID と GID を使用します。これは、コンテナーでは、useradd
などのコマンドを使用してユーザーを作成できないことを意味します。これは、新しいユーザーを作成するときに、コンテナー内のネームスペースに対応する UID と GID が存在しないためです。
Docker コンテナにユーザーを追加するにはどうすればよいですか?
Docker コンテナにユーザーを追加するには、いくつかの追加操作を実行する必要があります。具体的には、コンテナの構成ファイルを変更してユーザー名前空間を有効にし、ユーザー名前空間に独立した UID と GID を指定し、コンテナ内の root ユーザーを名前空間のユーザーにマップする必要があります。
Ubuntu を例として、コンテナ内で次のコマンドを使用してユーザー名前空間を有効にします。
sysctl kernel.unprivileged_userns_clone=1
このコマンドにより、特権のないユーザーがユーザー名前空間のクローンを作成できるようになります。次に、ユーザーの名前空間に独立した UID と GID を指定し、コンテナ内の root ユーザーを名前空間のユーザーにマップする必要があります。次のコマンドを使用します。
echo "namespace id range" > /etc/subuid echo "namespace id range" > /etc/subgid
ここで、namespace はユーザーの名前空間です。名前空間の ID、id はユーザー名前空間の初期 UID と GID、range はユーザー名前空間で許可されるユーザーの数です。
次に、adduser
コマンドを使用して新しいユーザーを作成し、そのユーザーをコンテナーに追加する必要があります。
adduser --uid 1000 --gid 1000 myuser
その中には、--uid と -- gid パラメーターは、前に定義した個別の UID および GID 名前空間にユーザーを追加します。
概要
Docker コンテナにユーザーを追加できない問題は、ユーザー名前空間を有効にし、名前空間に独立した UID と GID を指定することで解決できます。これには追加の作業が必要ですが、安全性と隔離性が向上するので価値があります。コンテナテクノロジーが発展し続けるにつれて、将来的にはよりシンプルで便利なソリューションが登場すると信じています。
以上がユーザーを Docker コンテナに追加できないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。