サーバー上のDocker LXCコンテナー内でいくつかのサービスを実行しており、実際にそれらを使用して深刻なことを始めています。
私が明確にしていないことの1つは、ユーザー権限がコンテナーの内部と外部でどのように機能するかです。たとえば、MySQLをコンテナーで実行していて、そのデータディレクトリをDockerボリュームである/data
に設定している場合、コンテナー内外のアクセス許可はアクセスポリシーにどのように影響しますか?
明らかに、アイデアはMySQLをコンテナ内の独自のユーザー(つまりmysql:mysql
)として実行し、そのディレクトリへの読み取りおよび書き込み権限を与えることです。これはかなり簡単で、ディレクトリをchmod
ingするだけだと思います。しかし、これはどのように機能しますかoutsideコンテナの? 「データ」と呼ばれるこのDocker共有ボリュームがあるので、それへのアクセス制御をどのように管理しますか?
MySQL共有ボリュームに定期的にアクセスしてデータをバックアップするDockerコンテナーの非特権ユーザーoutsideを実行できるように具体的に探しています。
ホスト上の特定のユーザーがDocker共有ボリュームのファイルとフォルダーを読み書きできるように、アクセス許可、ユーザー、およびグループをどのように設定できますか?
0.9のリリース以降、DockerはLXC
を削除し、独自の実行環境libcontainer
を使用しています。あなたの質問は少し古いですが、私の答えはまだあなたが使っているバージョンを適用していると思います。
クイックアンサー:ボリュームの権限を理解するために、mount --bind Host-Dir Container-Dir
の類推を行うことができます。したがって、要件を満たすために、権限を管理するための従来の方法を使用できます。 ACLが必要だと思います。
長い回答:例のように、ボリューム/data
のdockという名前のコンテナがあります。
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は3000で、コンテナにそのようなユーザーはいないため、メタデータから受信したUIDを表示するだけです。 useradd -u 3000 bob
を使用してコンテナ内にユーザーを作成すると、getfacl
には3000ではなくbobという名前が表示されます。
概要:したがって、コンテナの内部または外部から割り当てるユーザー権限は、両方の環境に反映されます。したがって、ボリュームのアクセス許可を管理するには、ホストマシンのUIDがコンテナーのUIDと異なる必要があります。