0.9 Dockerのリリースが廃止されLXC
、独自の実行環境が使用されて以来、libcontainer
。あなたの質問は少し古いですが、私の答えはあなたが使用しているバージョンにまだ当てはまると思います。
クイックアンサー:ボリュームのアクセス許可を理解するには、の例えを使用できますmount --bind Host-Dir Container-Dir
。したがって、要件を満たすために、アクセス許可を管理するための従来の方法を使用できます。ACLが必要だと思います。
長い答え:したがって、あなたの例のように、ボリューム付きのdockというコンテナがあります/data
。
docker run -tid --name dock -v /usr/container/Databases/:/data \
centos:latest /bin/bash
コンテナ内では、MySQLサーバーが/data
データディレクトリとして使用するように構成されています。その/data
ため、コンテナ内にデータベースがあります。そして、ホストOSのコンテナーの外部で、この/data
ボリュームをマウントし、データベースのバックアップを取るために/usr/container/Databases/
通常のユーザーbobを割り当てました。ホストマシンから、ユーザーbobの ACLを構成します。
useradd -u 3000 bob
usermod -R o=--- /usr/container/Databases/
setfacl -R -m u:bob:rwx /usr/container/Databases/
setfacl -R -d -m u:bob:rwx /usr/container/Databases/
テストするには、ユーザーbobでバックアップを作成します。
su - bob
tar -cvf container-data.tar /usr/container/Databases/
tarがリストされ、ユーザーがすべてのファイルにアクセスできたことがわかります。
これで、コンテナ内から確認するとgetfacl
、bobの代わりに3000が表示されます。これは、bobのUIDが3000であり、コンテナにそのようなユーザーがいないため、メタデータから受信したUIDを表示するだけです。コンテナにユーザーを作成すると、3000ではなくbobという名前useradd -u 3000 bob
が表示されるようになりgetfacl
ます。
要約:したがって、コンテナの内部または外部のいずれかから割り当てるユーザー権限は、両方の環境に反映されます。そのため、ボリュームのアクセス許可を管理するには、ホストマシンのUIDがコンテナのUIDと異なる必要があります。
docker
そのためのサポート、まだ)LXCコンテナは非特権ユーザーとして実行することができます。そうroot
しないと、コンテナが不適切に構成されている場合、コンテナ内のユーザーが潜在的に脱走する可能性があります。すなわちroot
、ホスト上のroot
特権LXCコンテナー内のコンテナーにあります。